ASP.基于IIS server's Windows域的.NET MVC 5身份验证

本文关键字:域的 Windows NET MVC 身份验证 IIS 基于 server ASP | 更新日期: 2023-09-27 18:02:55

我需要创建一个ASP。NET MVC 5 Web应用程序项目,可通过Internet访问。它将运行在属于Windows域的IIS服务器上,并且已经通过对某些url(接受域用户帐户)的普通HTTP认证对用户进行身份验证。

对于我的项目,我想有一个登录页面,将要求用户名和密码,并对同一Windows域进行身份验证。该用户不会使用其本地Windows域用户登录。我发现类似的问题,但使用表单身份验证,或ASP。. NET 2.0,我想这不是我应该用较新的基础架构来做的。

我正在使用Visual Studio 2013 Web Express,当我使用。net Framework 4.5模板创建一个新项目时,它允许我在无身份验证,个人用户帐户,组织帐户或Windows身份验证之间进行选择。

我在问这里之前已经研究了很多,但我没有找到任何线索,关于最后三个选项中的哪一个将允许我以我想要的方式配置我的应用程序,尽管我认为Windows身份验证仅限于内部网应用程序。
在我的研究中,我意识到System.DirectoryServices.dll,但我不确定这是否是我实现身份验证逻辑的方式。

任何提示/链接将非常感激,但示例代码总是更好。

谢谢!

ASP.基于IIS server's Windows域的.NET MVC 5身份验证

这是一个使用PrincipalContext (System.DirectoryServices.AccountManagement)来验证域凭据的方法。

public static bool ValidateDomainCredentials(string username, string password)
{
    if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
    {
        return false;
    }
    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "mydomain"))
    {
           return pc.ValidateCredentials(username, password);
    }
}

在登录前调用此函数以确保用户在活动目录中。

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    ...
    var user = await UserManager.FindByNameAsync(model.Username);
    if (user != null && ValidateDomainCredentials(user.user_Name, model.Password))
    {
        await SignInAsync(user, model.RememberMe);
        return RedirectToLocal(returnUrl);
    }
}
相关文章: