IdentityManager未获得所有声明

时间:2016-03-25 19:16:10

标签: asp.net-identity claims-based-identity thinktecture-ident-server identityserver3 identitymanager

我的IdentityServer设置只有一个混合流客户端,为 AllowedScopes 设置“all_claims”。在另一台计算机上,我有一个连接到IdSvr的MVC应用程序来登录用户。它还为IdMgr设置/admin绑定。我可以毫无问题地登录主应用程序和IdMgr。在用户登录后的主应用程序中,我按预期获得所有声明,但不是在IdMgr中。

我正在尝试根据声明在IdMgr中添加一些自定义逻辑。但是当我在任何IdMgr控制器中获得Thread.CurrentPrincipal时,它是空的!我得到的只是一个只有角色声明的 ClaimsPrincipal 对象。它还有一个 ClaimsIdentity 对象,具有以下属性:

AuthenticationType: "Bearer"
IsAuthenticated: true
NameClaimType: "name"
RoleClaimType: "role"

其他一切都是null。用户甚至没有名称或ID。为什么会这样,我怎样才能在IdentityManager中获得所有声明?

要重现这一点,只需检查UsersControllerSystem.Threading.Thread.CurrentPrincipal方法中的GetUsersAsync

在GitHub上链接到此issue

2 个答案:

答案 0 :(得分:0)

在身份管理器范围内尝试 IncludeAllClaimsForUser = true

            new Scope{
                Name = IdentityManager.Constants.IdMgrScope,
                DisplayName = "IdentityManager",
                Description = "Authorization for IdentityManager",
                Type = ScopeType.Identity,
                IncludeAllClaimsForUser = true

答案 1 :(得分:-1)

如果您想要IdMgr的自定义声明,那么我建议您在管道中进行声明转换。