首页 > 解决方案 > 使用 Windows 身份验证时如何保留自定义声明

问题描述

我正在尝试在使用 Windows 身份验证时向我的 MVC 应用程序添加声明,但声明在请求之间不会持续存在。

关于如何做到这一点的任何建议?我在 global.asax 的 Application_AuthorizeRequest 中添加声明并读取我的控制器中的值。

全球.asax:

protected void Application_AuthorizeRequest()
{
    var claimsPrincipal = User as ClaimsPrincipal;
    var claimsIdentity = User.Identity as ClaimsIdentity;
    if (!claimsPrincipal.Claims.Where(x => x.Type == "IsSpecial").Any()) \\ALWAYS TRUE!
    {
        var domain = User.Identity.Name.Split('\\')[0];

        using (var ctx = new PrincipalContext(ContextType.Domain, domain))
        using (var user = UserPrincipal.FindByIdentity(ctx, HttpContext.Current.User.Identity.Name))
        {
            if (user != null)
            {
                var groups = user.GetGroups()
                   .Select(x => x.SamAccountName);

                if (groups.Contains("Special User")
                {
                    claimsIdentity.AddClaim(new Claim("IsSpecial", "Yes"));
                }

控制器:

var claimsPrincipal = User as ClaimsPrincipal;
    var isSpecial = claimsPrincipal.Claims.Where(x => x.Type == "IsSpecial").First().Value;

标签: c#asp.net-mvcauthentication

解决方案


这就是它的工作方式。用户的身份总是为每个请求重新创建,尽管确切的方法因身份验证方法而异。

启用 Windows 身份验证基本上只是意味着在浏览器发送票证/用户名/密码时自动为您设置用户名。

无论您使用 cookie、不记名令牌还是 Windows 身份验证,以及是否将声明存储在 AD、数据库或令牌中,您仍然需要在每个请求的某个时间点添加声明


推荐阅读