IdentityServer 4:作用域是 ApiResource 独有的吗?
IdentityServer 4: Are Scopes unique to the ApiResource?
IdentityServer 中是否有范围只能属于单个 ApiResource 的限制?
在我看来,IdentityServer 使用允许的范围列表来构建一个受众列表来查找他们所属的 ApiResources,并且每个范围只属于一个 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
然而,当我们错误地通过为两个 ApiResources 重用相同的范围而弄乱了配置时,事情变得有点奇怪:
ApiResource Scopes
------------------------------
api/Orders api/Products
api/Products api/Products
我们最终得到了这个:
aud:
api/Orders
scope:
api/Products
似乎建立受众列表的方式是通过调用 IResourceStore.GetAllResources()
(我们已经实现它来检索 ApiResources 的完整目录及其相关范围),然后获取第一个 ApiResource匹配给定的允许范围,只要没有其他 ApiResources 也具有相同的范围,它应该可以正常工作。 :)
-S
范围名称必须是唯一的。
如果您想在多个 API 中使用相同的范围名称 - 请在它们前面加上前缀,例如"api1.read"、"api2.read" 或类似的。
IdentityServer 中是否有范围只能属于单个 ApiResource 的限制?
在我看来,IdentityServer 使用允许的范围列表来构建一个受众列表来查找他们所属的 ApiResources,并且每个范围只属于一个 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
然而,当我们错误地通过为两个 ApiResources 重用相同的范围而弄乱了配置时,事情变得有点奇怪:
ApiResource Scopes
------------------------------
api/Orders api/Products
api/Products api/Products
我们最终得到了这个:
aud:
api/Orders
scope:
api/Products
似乎建立受众列表的方式是通过调用 IResourceStore.GetAllResources()
(我们已经实现它来检索 ApiResources 的完整目录及其相关范围),然后获取第一个 ApiResource匹配给定的允许范围,只要没有其他 ApiResources 也具有相同的范围,它应该可以正常工作。 :)
-S
范围名称必须是唯一的。
如果您想在多个 API 中使用相同的范围名称 - 请在它们前面加上前缀,例如"api1.read"、"api2.read" 或类似的。