【问题标题】:Update Asp.Net Core Role Claim更新 Asp.Net Core 角色声明
【发布时间】:2018-09-19 11:28:53
【问题描述】:

如何更改角色声明并将其应用于 Asp.Net Core 中的一个请求? 我尝试使用

_signInManager.RefreshSignInAsync(user);

但它只有在刷新页面后才有效。有没有办法在一个请求中更新用户角色并更改当前主体?

【问题讨论】:

  • 究竟是什么意思“它只有在刷新页面后才能工作”。什么检查如果失败,这个检查是在 RefreshSignInAsync 之后执行的吗?
  • @ChristophLütjen 我的意思是新角色仅在刷新页面后才会验证默认属性,如 [Authorize(Roles="NewRole")](cookie 需要更新),但它有任何方法可以设置新的具有新角色的请求的主体,以便进一步处理可以使用它?
  • 您能否发布执行 RefreshSingInAsync 的控制器操作以及您的代码不起作用?能够理解整个流程会有所帮助......

标签: c# asp.net-core .net-core asp.net-identity


【解决方案1】:

您无法直接更改Current ClaimsPrincipal

要反映新声明,您可以尝试_signInManager.CreateUserPrincipalAsync

要检查同一请求中的新角色,您可以尝试User.AddIdentity 将新角色声明显式添加到User

                var roleName = Guid.NewGuid().ToString();                
            var r1 = User.IsInRole(roleName);

            var user = await _userManager.GetUserAsync(User);
            var role = await _roleManager.CreateAsync(new IdentityRole { Name = roleName });
            await _userManager.AddToRoleAsync(user, roleName);

            var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user);
            var claims = claimsPrincipal.Claims.ToList();

            User.AddIdentity(new ClaimsIdentity(new List<Claim>() { claims.FirstOrDefault(c => c.Value == roleName) }));

            var r3 = User.IsInRole(roleName);

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2020-12-30
    • 2017-06-21
    • 1970-01-01
    • 2016-12-25
    • 2019-11-22
    • 1970-01-01
    • 2019-03-12
    相关资源
    最近更新 更多