ApiResource中使用的声明与IdentityServer4中的作用域之间有何不同

时间:2017-08-24 10:18:56

标签: scope identityserver4 claims

我在我的ResourceApi中创建了一个IndetityServer4

我已经定义了一个名为API 1的ApiResource,并直接为此api资源指定了声明 - name, sub,并且我已扩展此资源并指定两个名为Api1.Read和{{1}的范围并为每个范围指定我对API的特定部分所需的特定声明,但我不明白ApiResource和Scopes中使用的声明有什么不同?

Api1.WriteClaimsApiResource中使用的声明有直接关系是什么意思?

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

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"}
                    }
                }
            };

1 个答案:

答案 0 :(得分:3)

根据documentation on ApiResourceUserClaims中的ApiResource本身将始终包含在访问令牌中。如果您将该api划分为多个Scope,那么此处列出的UserClaims将添加到UserClaims中指定的ApiResource