Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于IIS服务器Windows域的ASP.NET MVC 5身份验证_C#_Authentication_Asp.net Mvc 5 - Fatal编程技术网

C# 基于IIS服务器Windows域的ASP.NET MVC 5身份验证

C# 基于IIS服务器Windows域的ASP.NET MVC 5身份验证,c#,authentication,asp.net-mvc-5,C#,Authentication,Asp.net Mvc 5,我需要创建一个ASP.NETMVC5Web应用程序项目,该项目可以通过Internet访问。它将在属于Windows域的IIS服务器上运行,并且已经通过普通HTTP身份验证对接受域用户帐户的某些URL的用户进行身份验证 对于我的项目,我希望有一个登录页面,该页面将要求输入用户名和密码,并针对相同的Windows域进行身份验证。用户不会使用其本地Windows域用户登录。我已经找到了类似问题的参考资料,但是使用表单身份验证或ASP.NET 2.0,我想这不是我应该使用更新的基础设施的方式 我正在使

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

对于我的项目,我希望有一个登录页面,该页面将要求输入用户名和密码,并针对相同的Windows域进行身份验证。用户不会使用其本地Windows域用户登录。我已经找到了类似问题的参考资料,但是使用表单身份验证或ASP.NET 2.0,我想这不是我应该使用更新的基础设施的方式

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

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

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


谢谢

下面是一个使用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);
    }
}
在登录之前调用此选项,以确保用户位于active directory中

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);
    }
}

嗨,Alexandre,欢迎来到SO。关于你的问题,我们需要更多的信息来回答你的问题。您说您的用户将通过internet访问,但您没有注意到用户的凭据来自您的本地广告或其他广告。此外,您也没有注意到您希望用户通过何种工作流登录,您的安全注意事项是什么等等。但我的猜测是,如果您只是验证本地广告中的用户,而这些用户恰好是从网络外部连接的,那么只需将auth设置为Windows身份验证即可。@Aron:用户的凭据将来自同一个Windows域控制器广告,我猜这是用来使用HTTP身份验证的。用户将通过访问登录页面并输入用户名/密码进行身份验证,这与HTTPAuth对话框非常相似,但使用的是Razor页面。我不知道Windows身份验证是否是最佳选择,因为用户不会使用与本地域相同的用户名登录。它应该与单个用户帐户一样工作,只是用户/角色不会存储在SQL数据库中,而是通过Windows域管理进行管理。您为什么要使用登录表单而不是浏览器登录?使用浏览器要容易得多,因为它只是Windows Auth over Basic,而您所说的需要内部组织身份验证,这有点过火,通常在您在网站外托管网站时使用。@Aron:出于安全原因,Windows Auth over Basic不需要HTTPS吗?对于内部部署组织身份验证,我在哪里可以找到所需的内部部署机构元数据文档URL?否。您可以将基本身份验证与HTTP一起使用。然而,这将是完全不安全的,不亚于你的建议。但是,您也可以使用Digest Auth,它比forms Auth或basic Auth更强大。