首页 > 解决方案 > 使用客户端凭据 OAuth 的 Azure AD Graph API

问题描述

我正在尝试对' https://graph.windows.net/ {{tenantId}}/accounts?api-version=1.6进行 API 调用

我首先使用 client_credentials 令牌调用来获取访问令牌。这是电话:

POST /{{tenantId}}/oauth2/token HTTP/1.1
  Host: login.microsoftonline.com
  Content-Type: application/x-www-form-urlencoded
  User-Agent: PostmanRuntime/7.19.0
  Host: login.microsoftonline.com

  grant_type=client_credentials&client_id={{client_id}}&client_secret={{client_secret}}&\
  resource=https%3A%2F%2Fgraph.windows.net

这将返回一个 JWT(我删除了与此问题无关的元素):

{
  "aud": "https://graph.windows.net",
  "iss": "https://sts.windows.net/e1642542-781d-481e-a194-1c271a68a5f1/"   
  "roles": [
     "Application.ReadWrite.OwnedBy",
     "Application.ReadWrite.All"
  ],
}

您可以看到 aud 设置为https://graph.windows.net并且指示了适当的应用程序角色。

然而,当我对 graph.windows.net 端点进行帐户调用时,我收到一个错误:

{
  "odata.error": {
    "code": "Authentication_MissingOrMalformed",
    "message": {
        "lang": "en",
        "value": "Access Token missing or malformed."
    }
  }
}

对于 /accounts 调用,我添加了一个 Authorization 标头,其值设置为 Bearer:(访问令牌)。相同的令牌在 jwt.io 中被完美解码,所以我知道令牌本身很好。

有任何想法吗?

标签: oauth-2.0azure-active-directoryazure-ad-graph-api

解决方案


Azure 已停止更新 Azure AD Graph API。在此文档中,建议使用 Graph API 而不是 Azure AD Graph API。

从数据有效负载中相应地设置范围参数。


推荐阅读