使用Azure AD v1客户端凭据与Microsoft Graph

时间:2017-10-30 20:13:29

标签: azure-active-directory microsoft-graph azure-ad-graph-api

我们已经设置了v1 Azure AD应用程序,并与this setup guide密切配合。

我们已成功对Azure AD Graph API进行基于客户端凭据的oAuth调用。此外,对于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添加了以下权限。 (基本上我们抓了很多东西才能看到有效的东西)

申请权限:

  • 读写所有用户的完整个人资料
  • 阅读所有用户的完整个人资料
  • 读取和写入目录数据
  • 读取目录数据
  • 读写所有群组
  • 阅读所有群组

委托权限:

  • 读取和写入目录数据
  • 读取目录数据
  • 读写所有群组
  • 阅读所有群组
  • 读写所有用户的完整个人资料
  • 阅读所有用户的完整个人资料
  • 阅读所有用户的基本资料
  • 对用户个人资料的读写权限

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

我们在另一篇文章中找到了完整的解决方案: Call Microsoft Graph API Using Azure AD 1.0 Endpoint Client Credentials Flow

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