我只设置了一个混合流客户端的IdentityServer,该客户端为AllowedScopes设置"all_claims"。在另一台计算机上,我有一个MVC应用程序,它连接到IdSvr以登录用户。它还为IdMgr设置了一个/admin
绑定。我可以毫无问题地登录到主应用程序和IdMgr。同样,在用户登录后的主应用程序中,我会按预期获得所有声明,但不会在IdMgr中。
我试图在IdMgr中添加一些基于声明的自定义逻辑。但是,当我在任何IdMgr控制器中获得Thread.CurrentPrincipal
时,它都是空的!我得到的只是一个只有角色声明的ClaimsPrincipal对象。它还有一个ClaimsIdentity对象,具有以下属性:
AuthenticationType: "Bearer"
IsAuthenticated: true
NameClaimType: "name"
RoleClaimType: "role"
其他的都是空的。甚至没有用户的名称或Id。为什么会这样,我如何在IdentityManager中获得所有索赔?
为了重现这一点,只需在UsersController
中的GetUsersAsync
方法中检查System.Threading.Thread.CurrentPrincipal
即可。
GitHub上这个问题的链接
在身份管理器作用域中尝试IncludeAllClaimsForUser=true
new Scope{
Name = IdentityManager.Constants.IdMgrScope,
DisplayName = "IdentityManager",
Description = "Authorization for IdentityManager",
Type = ScopeType.Identity,
IncludeAllClaimsForUser = true
如果您想要IdMgr的自定义声明,那么我建议您在管道中进行声明转换。