我在我的ResourceApi
中创建了一个IndetityServer4
:
我已经定义了一个名为API 1
的ApiResource,并直接为此api资源指定了声明 - name, sub
,并且我已扩展此资源并指定两个名为Api1.Read
和{{1}的范围并为每个范围指定我对API的特定部分所需的特定声明,但我不明白ApiResource和Scopes中使用的声明有什么不同?
Api1.Write
中Claims
与ApiResource
中使用的声明有直接关系是什么意思?
我已尝试仅在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"}
}
}
};
答案 0 :(得分:3)
根据documentation on ApiResource,UserClaims
中的ApiResource
本身将始终包含在访问令牌中。如果您将该api划分为多个Scope
,那么此处列出的UserClaims
将添加到UserClaims
中指定的ApiResource
。