ADFS 中多个资源的令牌

Tokens for several resources in ADFS

我有 ADFS 4.0 我已经设置了 Web API 资源,并使用 resource 参数获取了该资源的访问令牌。 我有 SPA angluar 应用程序可以登录并获取令牌 我收到的听众是这样的:microsoft:identityserver:web.API 这是正确的,也是意料之中的。

所以问题: 当我在 ADFS 上的一个应用程序组中有多个 API 时,处理这种情况的最佳做法是什么?

例如,我是否应该为两个 API 创建 2 个线程刷新令牌?或者有没有办法为两个 API 请求一个令牌?

我的目标是开发符合行业 OAuth 标准的东西,这些标准基于范围和声明,如以下文章所示。这将为您提供未来最好的授权选项以及移植代码的选项,例如移植到 Azure AD:

OAuth 客户端(例如 SPA)获取一种类型的令牌(具有特定范围和声明)以及将该令牌转发给微服务架构中的多个 API 是标准做法。这也导致了简单的代码。

每个相关的 API 集都会收到一个具有这些值的访问令牌,然后每个 API 应该根据其预期的受众和范围验证令牌,然后使用声明对于更细粒度的授权:

  • 听众:'api.mycompany.com'
  • 范围:'inventory_read orders_write'

为每个 API 注册一个单独的 OAuth 客户端是不标准的,一个选项可能是注册一个 'default' 逻辑资源来代表您的 API 平台。在 ADFS 中,您可以模拟类似于 this guide:

的范围
string ResourceId = "https://api.mycompany.com/";
var scopes = new [] { ResourceId + "inventory_read", ResourceID + "orders_write"}

我使用 ADFS 已经有一段时间了,您可能需要根据它的局限性进行调整 - 但希望这有助于稍微阐明您的要求。

另请注意,在 Azure AD 1.0 中获取访问令牌时,'resource' 参数过去是必需的,但在 Azure AD 2.0 中已被范围取代。