代码之家  ›  专栏  ›  技术社区  ›  woggles

如何在使用windows身份验证时保留自定义声明

  •  0
  • woggles  · 技术社区  · 7 年前

    我尝试在使用windows身份验证时向MVC应用程序添加声明,但声明在两个请求之间不存在。

    有什么建议吗?我正在global.asax中的应用程序请求中添加声明,并读取控制器中的值。

    全球.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;
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   ste-fu    7 年前

    这就是它的工作方式。用户的身份是 为每个请求重新创建,但具体方法因身份验证方法而异。

    每个请求