【问题标题】:Azure AD Graph API using client credentials OAuth使用客户端凭据 OAuth 的 Azure AD Graph API
【发布时间】:2020-02-28 04:46:04
【问题描述】:

我正在尝试对 '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.0 azure-active-directory azure-ad-graph-api


    【解决方案1】:

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

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

    【讨论】:

    • 是的,但是图形 API 不提供应用注册功能(v1 中没有;它存在于 v2 中,但仍处于测试阶段,我们需要适合生产的东西)跨度>
    【解决方案2】:

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

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

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

    【讨论】:

    • 很高兴我能帮上忙!如果您觉得我的回答解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧 SO。
    猜你喜欢
    • 2019-12-03
    • 2018-04-11
    • 1970-01-01
    • 2018-02-08
    • 2019-12-15
    • 2020-03-25
    • 2021-04-10
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多