Active directory窗体ASP.NET MVC 5的标识



我有一个应用程序,我想在MVC应用程序中使用带有独立身份验证的active directory。我希望每个用户都可以使用带有AD凭据的表单登录。并使用Identity管理角色和权限。我正在尝试使用Owin,现在我可以使用AD进行身份验证。但我不能为用户分配角色或声明,因为我的数据库中没有这些角色或声明。如何将身份验证与AD以及个人身份验证中的角色和声明相结合?我使用此教程进行AD身份验证。http://tech.trailmax.info/2016/03/using-owin-and-active-directory-to-authenticate-users-in-asp-net-mvc-5-application/

了解这篇文章是旧的;但是,我想和大家分享一下我做了什么让它发挥作用。基本思想是使用AD进行身份验证。然后复制Identity中的凭据,并将现有的Identity角色应用于新登录。不过要明白,如果系统要求更改AD密码,这将导致问题。AD的密码不会使用此代码更新Identity的密码。

其他需要考虑的事情是使用AD的组和角色,而不是Identity的。

我从一个实现OWIN和Identity 2.0的应用程序开始。然后,我按照您上面提到的教程添加了AD身份验证。自从我开始使用Identity和OWIN以来,所有的登录代码都已就绪。

  • 我引用了System.DirectoryServices.AccountManagement
  • 创建了他的AdAuthenticationService类
  • AccountController中存在我的LoginController代码。我将以下代码放在公共异步任务登录(LoginViewModel模型,字符串returnUrl)中,就在模型验证之后,在身份验证代码之前。请注意,我删除了他的代码块中的返回。如果AD身份验证有效,我希望它继续通过Identity进行验证。如果没有,它将在返回登录视图时列出所有"错误"。

        var authenticationManager = HttpContext.GetOwinContext().Authentication;
        var authService = new AdAuthenticationService(authenticationManager);
        var authenticationResult = authService.SignIn(model.UserName, model.Password);
        if (authenticationResult.IsSuccess)
        {
            ModelState.AddModelError("", "AD Authenticated: " + model.UserName);
            // we are in
            // check to see if user exixts in AspNetUsers.  If not, add with default role.
            var inAsp = UserManager.Users.Any(x => x.UserName == model.UserName);
            if (!inAsp)
            {
                ModelState.AddModelError("", "Did not find User: " + model.UserName);
                var newUser = new ApplicationUser
                {
                    UserName = model.UserName,
                    Email = model.UserName + "@a_company.com"
                };
                ModelState.AddModelError("", "Set new user " + model.UserName);
                // Add the AD user as an Identity user so we can relate a role to AD Login.
                var chkUser = UserManager.Create(newUser, model.Password);
                ModelState.AddModelError("", "Created new user: " + model.UserName + " Error: " + string.Join("n", chkUser.Errors.ToArray()));
                //Add default User to Role Admin   
                if (chkUser.Succeeded)
                {
                    ModelState.AddModelError("", "Created Identity user: " + newUser.UserName);
                    var result1 = UserManager.AddToRole(newUser.Id, "PM");
                    if (result1.Succeeded)
                        ModelState.AddModelError("","Added PM role to user: " + newUser.UserName);
                }
            }
        }
    

缺陷为:

  • IdentityConfig.cs文件中的密码验证与AD的密码验证条件不匹配
  • 没有将我的AppPool的标识设置为LocalSystem

共享视图_LoginPartial.chtml和_Layout.chtml已正确编码。

相关内容

  • 没有找到相关文章

最新更新