Identity Server 4 - 如何在实际用例中应用 ApiScope?

Jac*_*ong 2 scope identityserver4

我是 Identity Server 4 的新手。ApiScope 的概念不清楚,你能解释得更详细吗?以及我们如何在实际中应用它。

示例:Web API 将有以下模块,我想限制对模块的访问,我可以基于它吗?如果可能,我们如何在系统中配置它

Scopes =
    {
         new Scope()
         {
             Name = "accountmanagement",
             DisplayName = "Account management api",
         },
         new Scope()
         {
             Name = "stockmanagement",
             DisplayName = "Account management api",
         }
    }
Run Code Online (Sandbox Code Playgroud)

谢谢,

Mas*_*ton 5

范围是一个抽象概念,您可以使用您认为合适的方式来细分(或不适合)您的 API 资源。例如,您可能有:

  • 一个范围涵盖多个物理上不同的 API(“OurEnterpriseScope”)
  • 每个物理 API 一个范围(“OurDataAccessApiScope”、“OurFinanceApiScope”)
  • 每个物理 API 的多个范围,无论您认为合适的粒度。也许有两种:一种用于读取,一种用于写入。也许一种适用于普通用户,一种适用于管理员用户。也许每个端点都有一个范围(但不要......)

在 IdentityServer 中,您可以AllowedScopesClient对象上使用指定您的客户端有权访问的范围。因此,您可能有一个只能使用“MyApiUser”范围的客户端和一个可以同时使用“MyApiUser”范围和“MyApiAdmin”范围的不同客户端。

范围不是的功能user,只有client用户正在使用。

如何分解资源完全取决于您。

在您的API,你需要定义AllowedScopes你的范围内UseIdentityServerAuthentication,让你的API知道的作用域将访问令牌内接受。如果您有一个接受多个范围的 API,并且您想根据访问令牌的范围来控制对端点的访问(因为您的 API 支持多个客户端,每个客户端具有不同的范围),那么您可以定义Policies基于Claims(范围只是作为索赔包裹)。

一个很好的阅读可以在这里找到:https : //leastprivilege.com/2015/12/28/validating-scopes-in-asp-net-4-and-5/