如何在声明中为特定于应用程序的角色建模

时间:2016-01-27 09:22:09

标签: claims-based-identity identityserver3

我们有一个中央UserManagerApplication,可管理多个应用程序的用户和角色。在这个应用程序中,我们通常设置

  • UserA位于Application1的角色Admin
  • UserA是Application2的角色Reader

问题:当Application2请求包含角色的范围(例如scopeApp1)时,将返回Reader和Admin角色声明,因为它们是在claimtypes而非范围上过滤的。

问题:如何仅请求角色的子集?

我们使用自定义用户服务,根据我的理解,我可以过滤掉返回的声明的位置在此方法中,我无法找到一种方法来确定客户端请求的范围:

public override Task GetProfileDataAsync(ProfileDataRequestContext context)

据我所知,我的选择是:

  • 包括角色中包含的ApplicationName(App1Admin,App2Reader等)
  • 为每个应用程序创建一个新的ClaimType。 App1Role,App2Role
  • 我错过了一些显而易见的事情,需要更好地理解

感谢您的帮助

Larsi

1 个答案:

答案 0 :(得分:0)

我被指向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)

这让我可以找出所要求的范围。