【问题标题】:IdentityServer 4: Are Scopes unique to the ApiResource?IdentityServer 4:范围是 ApiResource 独有的吗?
【发布时间】:2017-04-20 18:43:53
【问题描述】:

IdentityServer 中是否存在范围只能属于单个 ApiResource 的限制?

在我看来,IdentityServer 使用允许的范围列表来构建一个受众列表来查找他们所属的 ApiResource,并且每个范围只属于一个 ApiResource。

我们定义了以下一组 ApiResources 及其范围:

ApiResource     Scopes
------------------------------
api/Orders      api/Orders
api/Products    api/Producs

这在我们的 JWT 中产生了一组很好的受众和范围值:

aud:
api/Orders
api/Products

scope:
api/Orders
api/Products

但是,当我们犯了一个错误,通过为两个 ApiResource 重用相同的范围来搞乱配置时,事情变得有点奇怪:

ApiResource     Scopes
------------------------------
api/Orders      api/Products
api/Products    api/Products

我们最终得到了这个:

aud:
api/Orders

scope:
api/Products

似乎构建受众列表的方式是调用IResourceStore.GetAllResources()(我们已经实现它以检索 ApiResources 及其关联范围的完整目录),然后获取与给定允许匹配的第一个 ApiResource范围,只要没有其他 ApiResources 也具有相同的范围,它应该可以正常工作。 :)

-S

【问题讨论】:

    标签: identityserver4 scopes


    【解决方案1】:

    作用域名称必须是唯一的。

    如果您想在多个 API 中使用相同的范围名称 - 为它们添加前缀,例如“api1.read”、“api2.read”或类似的。

    【讨论】:

    • 谢谢!我们正在更改配置结构以避免范围重复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2018-02-02
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多