【发布时间】:2021-08-15 04:43:00
【问题描述】:
如果令牌中只有一个角色,则 User.IsInRole() 有效
这是从声明中解码角色的方式
这似乎对人们有用,我已经读过他们像我一样将角色作为数组返回,但它有效。所以,我认为配置中有一些关于获取角色的内容,但我没有想法,希望 SO 的伟大社区可以提供帮助!
更新 1
我修改了这行
options.ClaimActions.MapUniqueJsonKey( "role", "role", "role" );
至
options.ClaimActions.MapJsonKey( "role", "role" );
现在我的声明看起来像:
所以角色现在从数组中分离出来,但 IsInRole() 仍然无法找到管理员(和其他人)
【问题讨论】:
-
删除 OIDC 身份验证配置中的
.MapUniqueJsonKey和RoleClaimType =。使用默认值,它们工作正常。 -
不幸的是,同时删除或仅删除 MapUniqueKey 会导致 0 个角色出现在权限测试页面中。
-
将token粘贴到jwt.io时,可以看到一个角色数组,对吧?
-
确实 - "role": [ "InstitutionalAdmin", "IDS_Admin", "Administrator" ],一个角色好像还可以,只是多个
-
好的,导出所有声明 (
User.Claims.Select(c => new { c.Type, c.Value }).ToList()),应该有多个http://schemas.microsoft.com/ws/2008/06/identity/claims/role类型的角色声明。然后看看它是否匹配身份的RoleClaimType(User.Identities.First().RoleClaimType)。确保您使用的是默认设置,(删除我上面提到的覆盖)
标签: authorization identityserver4 roles claims