IdentityServer 4:ApiResource的作用域是否是唯一的?

时间:2017-04-20 09:05:18

标签: identityserver4 scopes

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

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

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

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

在我们的JWT中产生了一组很好的aud(ience)和范围值:

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及其相关范围的完整目录),然后获取匹配a的第一个ApiResource给定允许的范围,只要没有其他ApiResources也具有相同的范围,它应该可以正常工作。 :)

-S

1 个答案:

答案 0 :(得分:1)

范围名称必须是唯一的。

如果要在多个API中使用相同的范围名称,请为它们添加前缀,例如: " api1.read"," api2.read"或类似的。