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 和范围中使用的声明之间有什么不同?
Claims
在 ApiResource
中直接连接和在 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 ApiResource,ApiResource
中的 UserClaims
本身将始终包含在访问令牌中。如果将 api 分成多个 Scope
,则此处列出的 UserClaims
将添加到 ApiResource
中指定的 UserClaims
。
我在我的 IndetityServer4
中创建了一个 ResourceApi
,如下所示:
我已经定义了一个名为 API 1
的 ApiResource,并为此 api 资源直接指定声明 - name, sub
,我扩展了此资源并指定了两个名为 [=15= 的范围] 和 Api1.Write
并为每个范围指定一个特定的声明,我需要 API 的特定部分,但我不明白 ApiResource 和范围中使用的声明之间有什么不同?
Claims
在 ApiResource
中直接连接和在 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 ApiResource,ApiResource
中的 UserClaims
本身将始终包含在访问令牌中。如果将 api 分成多个 Scope
,则此处列出的 UserClaims
将添加到 ApiResource
中指定的 UserClaims
。