我如何在声明中对特定于应用程序的角色建模
How do I model Application specific Roles in Claims
我们有一个中央 UserManagerApplication 来管理多个应用程序的用户和角色。在这个应用程序中,我们通常设置
- UserA 的角色是 Application1 的管理员
- UserA 在 Application2
的 Reader 角色中
问题:当 Application2 请求包含角色的范围(比如 scopeApp1)时,Reader 和管理员角色声明都将被返回,因为它们是根据声明类型而不是范围过滤的。
问题:如何只请求一部分角色?
我们使用自定义用户服务,根据我的理解,我可以在此方法中过滤掉返回的声明,但我无法找到一种方法来确定客户端请求的范围:
public override Task GetProfileDataAsync(ProfileDataRequestContext context)
据我所知,我的选择是:
- 包括角色中包含的 ApplicationName(App1Admin、App2Reader 等)
- 为每个应用程序创建一个新的 ClaimType。 App1Role、App2Role
- 我错过了一些明显的东西,需要更好地理解
感谢您的帮助
拉尔西
我在 https://github.com/IdentityServer/IdentityServer3/issues/474 找到了描述问题的好书。
此外,我在范围不可用的 CustomUserService 中添加了声明。当我改为在自定义 ClaimsProvider 中添加声明时,我得到的签名略有不同
public override async Task<IEnumerable<Claim>> GetAccessTokenClaimsAsync(ClaimsPrincipal subject, Client client, IEnumerable<Scope> scopes, ValidatedRequest request)
这让我可以找出请求的范围。
我们有一个中央 UserManagerApplication 来管理多个应用程序的用户和角色。在这个应用程序中,我们通常设置
- UserA 的角色是 Application1 的管理员
- UserA 在 Application2 的 Reader 角色中
问题:当 Application2 请求包含角色的范围(比如 scopeApp1)时,Reader 和管理员角色声明都将被返回,因为它们是根据声明类型而不是范围过滤的。
问题:如何只请求一部分角色?
我们使用自定义用户服务,根据我的理解,我可以在此方法中过滤掉返回的声明,但我无法找到一种方法来确定客户端请求的范围:
public override Task GetProfileDataAsync(ProfileDataRequestContext context)
据我所知,我的选择是:
- 包括角色中包含的 ApplicationName(App1Admin、App2Reader 等)
- 为每个应用程序创建一个新的 ClaimType。 App1Role、App2Role
- 我错过了一些明显的东西,需要更好地理解
感谢您的帮助
拉尔西
我在 https://github.com/IdentityServer/IdentityServer3/issues/474 找到了描述问题的好书。
此外,我在范围不可用的 CustomUserService 中添加了声明。当我改为在自定义 ClaimsProvider 中添加声明时,我得到的签名略有不同
public override async Task<IEnumerable<Claim>> GetAccessTokenClaimsAsync(ClaimsPrincipal subject, Client client, IEnumerable<Scope> scopes, ValidatedRequest request)
这让我可以找出请求的范围。