Azure AD Oauth2 隐式授予多个范围

nic*_*ick 3 node.js oauth-2.0 azure-active-directory azure-ad-msal msal.js

我有许多 AngularJS 应用程序,它们访问许多 NodeJS 托管的 API。我想用 Azure AD 隐式授权替换定制授权框架(长话短说我是如何到达那里的..)

目前正在经历 POC(基于Microsoft 示例),并且在获取用于 API 数量的单个访问令牌时遇到了问题

UI 和 API 均已在 AZURE AD 应用程序中注册。还配置了一些权限,以便他们有权调用 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" ]
};
Run Code Online (Sandbox Code Playgroud)

所以我天真地以为我能够获得一个可以针对多个 API 使用的访问令牌

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

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

我是否遗漏了“架构”上的某些内容,例如 API 管理层?

谢谢

缺口

juu*_*nas 5

这是对的。访问令牌仅适用于单个 API。

原因是每个令牌指定其有效的“受众”(存储在 aud 声明中)。这标识了令牌的预期目标 (API)。

此外,MS Graph API 使用与其他 API 完全不同的签名算法,因此无论如何都无法使用相同的令牌。

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

如果您愿意,您可以通过创建“API 网关”来为您的客户端简化它,该网关使用正确的令牌代理对正确 API 的调用。该网关将代替客户端处理令牌的复杂性,客户端只需要向网关进行身份验证。查看代表授权流程,了解网关如何以登录用户身份调用 API。