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

问题描述 投票:3回答:2

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

我想访问以下API:

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

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

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

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

oauth-2.0 microsoft-graph azure-ad-graph-api azureportal
2个回答
3
投票

您不能使用相同的访问令牌从字面上调用这两个API。因为访问令牌具有特定的受众,并且当受众声明与自己的应用ID URI不匹配时,其中一个API会拒绝令牌。

似乎您真正想要完成的是通过一次登录获得两个令牌,您可以做到这一点。

使用授权码授予流程,您可以使用户登录而无需指定资源。将向用户显示AAD和MS Graph API权限的同意,并且登录完成后,您的应用程序将获得身份验证代码。

那时,您的应用程序可以使用相同的授权代码两次调用令牌端点,以获取两个端点的两个访问令牌。从那里,您可以管理两个令牌,并同时维护对两个API的访问。

我在我的一个Python示例here中执行此操作,除了我的两个端点是AAD Graph API和Azure资源管理器。


0
投票

[授权码授予流程]之外还有另一个选项。如果您有一个现有的访问令牌,该令牌是发给一个观众的,并想供另一观众使用(同时保留令牌中包含的客户端和用户的身份),则可以使用代表-Of Grant,以便与新令牌交换令牌,只有这次才针对您需要的资源进行寻址。您可以在formal docs或我的帖子Getting Access Token for Microsoft Graph Using OAuth REST API中阅读它。

© www.soinside.com 2019 - 2024. All rights reserved.