Mik*_*son 6 asp.net-core identityserver4
我administrators
在身份验证后将角色添加到用户声明,IClaimsTransformer
其中包含以下内容:
(principal.Identity as ClaimsIdentity).AddClaim(new Claim(ClaimTypes.Role, "Administrators"));
但是,当我User.IsInRole("Administrators")
在Razor视图中调用时 ,它返回false.
小智 1
我在基于 API 的解决方案中做了类似的事情,但我在创建用户时设置了角色声明,而不是在变压器中。
查看User.IsInRole()
文档后,似乎该方法被设计为首先从缓存中提取。
IsInRole 首先检查 IsRoleListCached 属性以确定当前用户的角色名称缓存列表是否可用。如果 IsRoleListCached 属性为 true,则检查缓存列表中的指定角色。如果 IsInRole 方法在缓存列表中找到指定的角色,则返回 true。如果 IsInRole 未找到指定的角色,它将调用默认 Provider 实例的 GetRolesForUser 方法来确定用户名是否与配置的 ApplicationName 值的数据源中的角色关联。
我怀疑,由于ClaimTypes.Role
这是一个常见的声明,而不是自定义的特定于域的声明(我认为这是 ClaimsTransformer 的用例),因此应用程序正在使用默认的缓存预转换值。
不过,其中大部分都是猜测。您可以尝试在创建用户时设置声明。我使用 UserManager 类来完成此操作。
var claimsResult = await _userManager.AddClaimAsync(applicationUser, new Claim(ClaimsIdentity.DefaultRoleClaimType, "Administrator"));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1475 次 |
最近记录: |