【问题标题】:Asp.Net Core Refresh AzureAD claimsAsp.Net Core 刷新 AzureAD 声明
【发布时间】:2019-11-22 23:20:06
【问题描述】:

我有一个使用 AzureAD 对我的用户进行身份验证的 Asp.Net Core 2.1 Web 应用程序。在我的 Startup.cs 文件中,我使用 OpenIDConnectOptions 的 OnTokenValidated 事件在 SQL 数据库中查找用户,并根据数据库中设置的值添加我自己的角色声明。 这可行,但为了测试不同的角色,我必须更新数据库,然后退出并重新登录以测试是否处于不同的角色。

为了使这更容易,我有一些按钮允许用户选择一个新角色,从而更新数据库。不幸的是,他们仍然需要注销并重新登录才能影响角色。因此,是否可以更改角色声明,或者更简单地刷新 AD 中的声明并重新触发 OnTokenValidated 事件,从而将我的角色设置为新值。

【问题讨论】:

    标签: asp.net-core azure-active-directory


    【解决方案1】:

    你最好注销用户,让用户重新登录刷新原则。

    从 AD 刷新声明将不起作用,因为 AAD 令牌中涉及的角色是基于 Azure 资源的,这些角色与本地数据库中的用户角色无关。

    还有另一种方法可以非破坏性地更新用户主体,在 cookie 验证过程中调用 context.ReplacePrincipal 并将 context.ShouldRenew 属性设置为 true:

    https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-2.2#react-to-back-end-changes

    但正如文件所示:

    这里描述的方法是在每个请求上触发的。针对每个请求验证所有用户的身份验证 cookie 可能会导致应用的性能大幅下降。

    因此,如果您进行后端更改,只需注销用户并让他重新登录。

    【讨论】:

    • 非常感谢您的回复,我已经设法解决了我的问题,如下所示。这并不理想,但在我的测试阶段满足了我的要求
    【解决方案2】:

    我已经能够使用以下代码来实现我的要求:

    public async Task<IActionResult> ChangeRole(string role)
            {
                var principal = HttpContext.User;
                var customIdentity = principal.Identities.FirstOrDefault(x => x.Claims.Any(y => y.Type == ClaimTypes.Role));
                if (customIdentity != null)
                {
                    if (Enum.IsDefined(typeof(Role), role))
                    {
                        customIdentity.RemoveClaim(customIdentity.Claims.First(x => x.Type == ClaimTypes.Role));
                        customIdentity.AddClaim(new Claim(ClaimTypes.Role, role));
                    }
                }
    
                await HttpContext.SignInAsync(new ClaimsPrincipal(principal));
    
                return RedirectToAction("Index", "Home");
            }strong text
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 2016-12-25
      • 2018-05-08
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多