我的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中获得所有声明?
要重现这一点,只需检查UsersController
中System.Threading.Thread.CurrentPrincipal
方法中的GetUsersAsync
。
在GitHub上链接到此issue
答案 0 :(得分:0)
在身份管理器范围内尝试 IncludeAllClaimsForUser = true
new Scope{
Name = IdentityManager.Constants.IdMgrScope,
DisplayName = "IdentityManager",
Description = "Authorization for IdentityManager",
Type = ScopeType.Identity,
IncludeAllClaimsForUser = true
答案 1 :(得分:-1)
如果您想要IdMgr的自定义声明,那么我建议您在管道中进行声明转换。