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
答案 0 :(得分:1)
范围名称必须是唯一的。
如果要在多个API中使用相同的范围名称,请为它们添加前缀,例如: " api1.read"," api2.read"或类似的。