IdentityManager不会获取所有索赔



我只设置了一个混合流客户端的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的自定义声明,那么我建议您在管道中进行声明转换。

相关内容

  • 没有找到相关文章

最新更新