【问题标题】:Azure AD Oauth2 implicit grant multiple scopesAzure AD Oauth2 隐式授予多个范围
【发布时间】:2020-05-12 19:17:19
【问题描述】:

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

目前正在通过 POC(基于 Microsoft example )并且遇到了获取单个访问令牌以针对 API 数量使用的问题

ui 和 API 都已在 AZURE AD 应用程序中注册。还配置了许多权限,因此他们有权调用 API,例如https://graph.windows.net/User.Readapi://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 管理层?

谢谢

尼克

【问题讨论】:

    标签: node.js oauth-2.0 azure-active-directory msal msal.js


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢,我试图避免代表模式实现...我想我会尝试删除指向 Microsoft 图形 API 的链接,然后重试...
    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2015-06-28
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多