Azure AD Oauth2隐式授权多个作用域

3
我有几个使用angularJS的应用程序,它们访问一些托管在nodeJS上的API。我希望用Azure AD隐式授权(长话短说,是如何到达那里的...)替换定制的授权框架。
目前正在进行基于Microsoft示例的POC(基于此处),但在获得单个访问令牌以针对多个API时遇到了问题。
UI和API都已在AZURE AD Application中注册。此外,已配置了许多权限,以使其被授权调用API,例如https://graph.windows.net/User.Read api://xxx-xxx-xxxx-xx-xxxx/sales.admin 然后,我在客户端中定义
var requestObj = {
    scopes: ["https://graph.windows.net/User.Read", "api://xxx-xxx-xxxx-xx-xxxx/sales.admin" ]
};

我一开始天真地以为我可以获得一个可用于访问多个API的访问令牌

然而,看起来情况并非如此。客户端应用程序必须为其需要访问的每个API创建单独的访问令牌。

这是正确的吗?这给客户端增加了很多复杂性,因为它需要维护和刷新这些令牌。

我是否在 “架构” 上漏掉了什么,例如 API 管理层?

谢谢

Nick


你解决了吗?怎么解决的? - user2025527
1个回答

5

这是正确的。 一个访问令牌只适用于单个API。

原因在于每个令牌都指定了其有效的"受众"(存储在aud声明中)。 这标识了令牌的目标API。

此外,MS Graph API使用完全不同的签名算法来处理其他API,因此甚至不能在同一个令牌中存在。

API可以在其清单中设置各种设置,以以各种方式影响令牌。 这也使得拥有一个可用于所有API的令牌变得非常困难。

如果您希望,您可以为客户创建一个“API网关”,该网关将代理调用正确的API以及具有正确令牌的API。 这个网关将处理令牌的复杂性,而不是客户端,客户端只需要对网关进行身份验证。 查看On-behalf-of授权流程,了解网关如何以已登录用户的身份调用API。


我正在尝试避免实现代表模式...我想我会尝试删除与Microsoft Graph API的链接,然后再试一次... - nick
我认为目前它可能不完全正确了。看起来我能够获得一个对于"User.Read" Microsoft Graph API和Azure DevOps API (https://app.vssps.visualstudio.com/user_impersonation)都有效的令牌。但是,将其与Kusto(访问Azure数据资源管理器)结合使用失败了。 - Michael Kopp
@MichaelKopp 是否已经为MS Graph /me端点和DevOps API端点完成了令牌工作? - juunas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接