将 Azure AD v1 客户端凭据与 Microsoft Graph 结合使用的 InvalidAuthenticationToken

InvalidAuthenticationToken using Azure AD v1 Client Credentials with Microsoft Graph

我们已经设置了 v1 Azure AD 应用程序,并与 this setup guide.

紧密结合

我们已成功对 Azure AD Graph 进行基于客户端凭据的 oAuth 调用 API。此外,对于 v2 应用程序,我们已经成功地对 Microsoft Graph API.

进行了基于客户端凭据的调用

但是,我们希望制作一个同时使用Azure AD Graph 和Microsoft Graph 的多租户应用程序,因此我们需要使用v1 应用程序调用Microsoft Graph。我们还认为基于客户端凭据的授权是最简洁的方法。

使用 v1 应用程序调用 Microsoft Graph 时,我们在调用响应中看到以下错误:

InvalidAuthenticationToken.  Access token validation failure.

这是一个示例令牌负载:

{
  "aud": "00000002-0000-0000-c000-000000000000",
  "iss": "https://sts.windows.net/a0482499-f164-4e2f-8564-909dabfc74cb/",
  "iat": 1509393647,
  "nbf": 1509393647,
  "exp": 1509397547,
  "aio": "Y2NgYNhb5ao7R09dJ+qAWf/tDcEnAA==",
  "appid": "eb7e150b-8a01-4c63-8e6c-31acbf1f0730",
  "appidacr": "1",
  "idp": "https://sts.windows.net/a0482499-f164-4e2f-8564-909dabfc74cb/",
  "oid": "16dd4917-534c-4633-88fc-dcb84e9b9a99",
  "roles": [
    "Directory.Read.All",
    "Directory.ReadWrite.All"
  ],
  "sub": "16dd4917-534c-4633-88fc-dcb84e9b9a99",
  "tenant_region_scope": "NA",
  "tid": "a0482499-f164-4e2f-8564-909dabfc74cb",
  "uti": "Zm-DzqIyX0u8RsXaO9kcAA",
  "ver": "1.0"
}

我们的令牌是从以下端点生成的,我们的域是 {tenant}:

https://login.microsoftonline.com/{tenant}/oauth2/token

在我们的应用程序中,我们为 Microsoft Graph 添加了以下权限。 (基本上我们只是抓了很多东西看看有用的东西)

应用程序权限:

委派权限:

您令牌的受众是: 00000002-0000-0000-c000-000000000000

Microsoft Graph 的受众是: 00000003-0000-0000-c000-000000000000

这是 Azure AD Graph API 的资源 ID,而不是 Microsoft Graph API。您没有说明您是否使用了 auth 库,但如果您使用的是 ADAL,则除了 Azure AD 之外,您还需要执行一个新的 AcquireTokenSilent(...) 请求访问 https://graph.microsoft.com图 API 请求。

确保在 Azure Portal 中您还为您的应用配置了调用 Microsoft Graph 的权限。

我们在另一个 post 中找到了完整的解决方案:

我们需要使用 api 变量 'resource' 而不是 'scope'