使用客户端凭据OAuth的Azure AD Graph API

时间:2019-11-01 23:03:31

标签: oauth-2.0 azure-active-directory 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中完美解码的令牌,所以我知道令牌本身很好。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

Azure已停止更新Azure AD Graph API。从this doc开始,建议使用Graph API代替Azure AD Graph API。

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

答案 1 :(得分:0)

  

对于/ accounts调用,我添加了一个Authorization标头,其值设置为Bearer :(访问令牌)。

Bearer: ey....不是正确的载体值,您不能在值中包含冒号。

GET /resource HTTP/1.1
  Host: server.example.com
  Authorization: Bearer mF_9.B5f-4.1JqM