【问题标题】:Tokens for several resources in ADFSADFS 中多个资源的令牌
【发布时间】:2021-08-26 10:44:20
【问题描述】:
我有 ADFS 4.0
我已经设置了 Web API 资源并使用 resource 参数为该资源获取了访问令牌。
我有登录并获取令牌的 SPA angluar 应用程序
我收到这样的听众:microsoft:identityserver:web.API,这是正确的和可预期的。
所以问题:
当我在 ADFS 上的一个应用程序组中有多个 API 时,处理这种情况的最佳做法是什么?
例如,我是否应该为两个 API 创建 2 个线程刷新令牌?或者有没有办法为两个 API 请求一个令牌?
【问题讨论】:
标签:
angular
single-page-application
openid-connect
adfs
【解决方案1】:
我的目标是开发符合行业 OAuth 标准的东西,这些标准基于范围和声明,如下面的文章所示。这将为您提供未来最佳的授权选项以及将代码移植到 Azure AD 等:
对于 OAuth 客户端(例如 SPA)来说,获取一种具有特定范围和声明的令牌,并将该令牌转发到微服务架构中的多个 API 是标准做法。这也导致了简单的代码。
每组相关的 API 都将收到一个具有这些值的访问令牌,然后每个 API 应根据其预期的受众和范围验证令牌,然后使用声明进行更细粒度的授权:
- 观众:'api.mycompany.com'
- 范围:'inventory_read orders_write'
为每个 API 注册一个单独的 OAuth 客户端不是标准的,一种选择可能是注册一个“默认”逻辑资源来代表您的 API 平台。然后,在 ADFS 中,您可以对类似于 this guide 的范围进行建模:
string ResourceId = "https://api.mycompany.com/";
var scopes = new [] { ResourceId + "inventory_read", ResourceID + "orders_write"}
自从我使用 ADFS 以来已经有一段时间了,您可能需要根据其限制进行调整 - 但希望这有助于澄清您的要求。
另请注意,在 Azure AD 1.0 中获取访问令牌时需要一个“资源”参数,但在 Azure AD 2.0 中已被范围取代。