api 范围和 identityserver4 中的用户声明之间的差异

Different between api scope and user claim in identityserver4

我正在阅读 identityserver4 guildence,这里是示例代码

        UserClaims =
        {
            new UserClaim(JwtClaimTypes.Name),
            new UserClaim(JwtClaimTypes.Email)
        },

        // this API defines two scopes
        Scopes =
        {
            new Scope()
            {
                Name = "api2.full_access",
                DisplayName = "Full access to API 2",
            },
            new Scope
            {
                Name = "api2.read_only",
                DisplayName = "Read only access to API 2"
            }
        }

我的问题是 似乎该范围用于控制哪个客户端可以访问 api 资源,并且用户声明控制对 api 的用户权限。让我们看一下 "api2.read_only",这是否意味着具有此范围的客户端只能对 api 进行读取访问?但是,如果用户具有例如:对特定 api 的写入权限怎么办?我对这两个感到困惑。 预先感谢您的帮助。

范围是特殊声明,它定义了客户端可以访问的资源。 用户声明只是关于用户的断言。您通常会给用户一个 "role" 或 "permission" 声明(或类似的东西)。如果基于范围的授权不能满足您的要求,您可以通过用户声明进行一些声明授权。

Scopes 定义您是否有权访问 API。 Claims 更细化的地方。在 API 内,您可以访问哪些资源?例如,您可以访问像名称这样的身份资源。