如何使用相同的OAuth2令牌访问Azure Graph和Microsoft Graph?

时间:2017-08-01 13:14:08

标签: oauth-2.0 microsoft-graph azure-ad-graph-api azureportal

我想使用相同的OAuth2令牌(在适用于iOS的Swift 3应用程序中)访问 Azure AD Graph API Microsoft Graph API - 这是可能的吗? ?

我想访问以下API:

我在Azure门户中创建了一个 Native 应用程序,并为 Microsoft Graph Microsoft.Azure.ActiveDirectory 添加了权限(超出许可范围)

我可以通过更改资源属性来访问这两个API(在登录时) - Azure配置似乎是正确的。但是在使用第一个资源进行身份验证时尝试使用相同的令牌访问其他API时,我收到“未授权”错误。我试图将这两个URL添加到资源属性,但后来我收到一个错误(“AADSTS50001:在租户中找不到应用程序名称。”)。我做错了什么或我错过了什么......?

如果不可能 - 为什么可以在Azure门户中添加多个API?

访问这两个API的原因:Microsoft Graph不提供所有属性(但支持增量更改),Azure AD Graph为我提供了完整的配置文件 - 两者都没有管理员权限(使用委派权限) )

2 个答案:

答案 0 :(得分:3)

您无法使用相同的访问令牌直接调用这两个API。由于访问令牌具有特定的受众群体,因此当受众群体声明与其自己的应用ID uri不匹配时,其中一个API会拒绝该令牌。

您真正想要实现的是使用单一登录体验获得两个令牌,您可以这样做。

使用授权代码授予流程,您可以让用户登录而无需指定资源。用户将获得AAD和MS Graph API权限的同意,并且您的应用程序将在登录完成后返回Auth Code。此时,您的应用程序可以使用相同的授权代码调用令牌端点两次,以获得两个端点的两个访问令牌。从那里,您可以管理两个令牌并同时保持对两个API的访问。

我在我的一个python示例here中执行此操作,但我的两个端点是AAD Graph API和Azure Resource Manager。

答案 1 :(得分:0)

除了授权代码授予流程之外,还有另一种选择。如果您有一个现有的访问令牌,该令牌发送给一个受众并希望将其用于其他受众(同时保留客户端和令牌中包含的用户的身份),则可以使用 On-代表授权用新的代币交换令牌,只有这次才能满足您所需的资源。

您可以在formal docs或我的帖子Getting Access Token for Microsoft Graph Using OAuth REST API中阅读相关内容。