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" 或类似的。