ApiResource 中使用的 Claims 和 IdentityServer4 中的 Scope 有什么不同

What is different between Claims used in ApiResource and Scope in IdentityServer4

我在我的 IndetityServer4 中创建了一个 ResourceApi,如下所示:

我已经定义了一个名为 API 1 的 ApiResource,并为此 api 资源直接指定声明 - name, sub,我扩展了此资源并指定了两个名为 [=15= 的范围] 和 Api1.Write 并为每个范围指定一个特定的声明,我需要 API 的特定部分,但我不明白 ApiResource 和范围中使用的声明之间有什么不同?

ClaimsApiResource 中直接连接和在 Scope 中使用的声明是什么意思?

我已经尝试仅在 sub and name 中限制 ApiResource 中的 UserClaims,但如果我想在 Api1.Write 中声明 role 它是在访问令牌中发送的,但在 Api1 的定义中是仅指定 name and sub - 为什么在 ApiResource 中定义了 UserClaims?

var apiResource = new ApiResource
            {
                Name = "Api1",
                UserClaims = new List<string> { "name", "sub" },

                Scopes = new List<Scope>
                {
                    new Scope
                    {
                        Name = "Api1.Read",
                        UserClaims = new List<string> {"sub", "name"}
                    },
                    new Scope
                    {
                        Name = "Api1.Write",
                        UserClaims = new List<string> {"sub", "name", "role"}
                    }
                }
            };

根据 documentation on ApiResourceApiResource 中的 UserClaims 本身将始终包含在访问令牌中。如果将 api 分成多个 Scope,则此处列出的 UserClaims 将添加到 ApiResource 中指定的 UserClaims