首页 文章

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

提问于
浏览
3

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

我想访问以下API:

我在Azure门户中创建了一个Native应用程序,并为Microsoft Graph和Microsoft.Azure.ActiveDirectory添加了权限(具有上述权限范围)

我可以通过 only 在验证时(登录时)更改资源属性来访问这两个API - Azure配置似乎是正确的 . 但是在使用第一个资源进行身份验证时尝试使用相同的令牌访问其他API时出现"Unauthorized"错误 . 我试图将这两个URL添加到资源属性,但后来我收到错误("AADSTS50001: The application name was not found in the tenant.") . 我做错了什么或我错过了什么......?

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

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

2 回答

  • 3

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

    看起来你真正想要实现的是使用单一登录体验获得两个令牌,你可以做到这一点 .

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

    我在我的一个python示例中执行此操作here,除了我的两个 endpoints 是AAD Graph API和Azure Resource Manager .

  • 0

    除了 Authorization Code Grant Flow 之外还有另一种选择 . 如果您有一个现有的访问令牌,该令牌发送给一个受众并希望将其用于其他受众(同时保留客户端和令牌中包含的用户的身份),您可以使用 On-Behalf-Of Grant 来交换令牌使用新的,只有这一次针对您需要的资源 .

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

相关问题