【问题标题】: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 中已被范围取代。

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多