针对 Active Directory 对 ASP.NET MVC 应用程序的用户进行身份验证的高级步骤是什么?
我假设是这样的:
- 修改 web.config 以使用 Windows 身份验证
- 配置 web.config 以使用 ActiveDirectoryMembershipProvider
- 将 web.config 配置为使用在 AD 中查找的自定义 RoleProvider
以上看起来是否合理,如果是,我将有效的用户检测逻辑放在哪里?
在我的情况下,有效用户是特定 AD 域中的某人。
针对 Active Directory 对 ASP.NET MVC 应用程序的用户进行身份验证的高级步骤是什么?
我假设是这样的:
以上看起来是否合理,如果是,我将有效的用户检测逻辑放在哪里?
在我的情况下,有效用户是特定 AD 域中的某人。
您可以使用普通表单身份验证针对 Active Directory 对用户进行身份验证,因为您只需要 AD 连接字符串:
<connectionStrings>
<add name="ADConn" connectionString="LDAP://YourConnection" />
</connectionStrings>
并添加 Membership Provider 以使用此连接:
<membership defaultProvider="ADMembership">
<providers>
<add name="ADMembership"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web,
Version=2.0.0.0,
Culture=neutral,
PublicToken=b03f5f7f11d50a3a"
connectionStringName="ADConn"
connectionUsername="domain/user"
connectionPassword="pwd" />
</providers>
</membership>
您将需要使用username@domain来成功验证用户身份。
这里有一些东西可以让你开始
如果您开始新项目,您可以随时从模板中选择Intranet 应用程序,一切都会为您处理好

如果要手动执行,则需要更改:
有关在 IIS7/8 和 IISExpress 上执行此操作的详细信息:
IIS 7 和 IIS 8
- 打开 IIS 管理器并导航到您的网站。
- 在功能视图中,双击身份验证。
在身份验证页面上,选择 Windows 身份验证。如果 Windows 身份验证不是一个选项,您需要确保在服务器上安装了 Windows 身份验证。
要在 Windows 上启用 Windows 身份验证: a)在控制面板中打开“程序和功能”。 b)选择“打开或关闭 Windows 功能”。 c)导航到 Internet 信息服务 > 万维网服务 > 安全并确保选中 Windows 身份验证节点。
要在 Windows Server 上启用 Windows 身份验证: a)在服务器管理器中,选择 Web 服务器 (IIS) 并单击添加角色服务 b)导航到 Web 服务器 > 安全并确保选中 Windows 身份验证节点。
在“操作”窗格中,单击启用以使用 Windows 身份验证。
- 在身份验证页面上,选择匿名身份验证。
- 在“操作”窗格中,单击禁用以禁用匿名身份验证。
IIS 快递
- 右键单击 Visual Studio 中的项目并选择使用 IIS Express。
- 在解决方案资源管理器中单击您的项目以选择该项目。
- 如果“属性”窗格未打开,请将其打开 (F4)。
- 在项目的“属性”窗格中: a) 将“匿名身份验证”设置为“禁用”。b) 将“Windows 身份验证”设置为“启用”。
在你web.config有类似的东西
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
</system.web>
就是这样!
现在,当您想要用户身份时,只需调用
@User.Identity.Name
这将向您展示我的Domain\Username喜好:

这里有一些东西可以让你开始
这是教程Chris Schiffhauer - Implement Active Directory Authentication in ASP.NET MVC 5 中的解决方案:
您可以通过直接根据用户的域凭据对用户进行身份验证来保护 Active Directory 网络上的 MVC Web 应用程序。
第 1 步:帐户控制器.CS
将您的
AccountController.cs文件替换为以下内容:using System.Web.Mvc; using System.Web.Security; using MvcApplication.Models; public class AccountController : Controller { public ActionResult Login() { return this.View(); } [HttpPost] public ActionResult Login(LoginModel model, string returnUrl) { if (!this.ModelState.IsValid) { return this.View(model); } if (Membership.ValidateUser(model.UserName, model.Password)) { FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); if (this.Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) { return this.Redirect(returnUrl); } return this.RedirectToAction("Index", "Home"); } this.ModelState.AddModelError(string.Empty, "The user name or password provided is incorrect."); return this.View(model); } public ActionResult LogOff() { FormsAuthentication.SignOut(); return this.RedirectToAction("Index", "Home"); } }第 2 步:帐户视图模型.CS
更新您的
AccountViewModels.cs(或任何您的 Account 模型类的名称)以仅包含此 LoginModel 类:using System.ComponentModel.DataAnnotations; public class LoginModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [Display(Name = "Remember me?")] public bool RememberMe { get; set; } }第 3 步:WEB.CONFIG
最后,更新您的
Web.config文件以包含这些元素。<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <authentication mode="Forms"> <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="45" slidingExpiration="false" protection="All" /> </authentication> <membership defaultProvider="ADMembershipProvider"> <providers> <clear /> <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" /> </providers> </membership> </system.web> <connectionStrings> <add name="ADConnectionString" connectionString="LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local" /> </connectionStrings> </configuration>获取 LDAP 连接字符串可能需要几个步骤:
安装适用于 Windows 7 的远程服务器管理工具。确保按照安装后的说明通过控制面板将该功能添加到 Windows。
打开命令提示符并输入
>dsquery server假设该命令返回以下内容:
CN=PRIMARY,CN=Servers,CN=DefaultFirstName,CN=Sites,CN=Configuration,DC=MyDomain,DC=Local
服务器名称由第一个 CN 值和最后两个 DC 值组成,用点分隔。所以它是
primary.mydomain.local。端口是 389。
端口和正斜杠之后的连接字符串部分是结果中以第一个 开头的部分
"DC"。所以它是DC=MyDomain,DC=Local。所以完整的连接字符串是
LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local.用户将只使用他们的用户名登录,而不使用域。所以正确的用户名是 Chris,而不是 MYDOMAIN\Chris。
我发现这个链接检查 AD 安全组:
ASP.NET MVC 5 中的 Active Directory 身份验证与表单身份验证和基于组的授权
唯一的问题是此设置使用登录页面来捕获 AD 的用户名/密码凭据。我将身份验证从“FORMS”更改为“WINDOWS”,因为我的应用程序将始终从网络内访问。如果您不打算使用 FORMS 身份验证,也不要忘记<forms>从标签中删除子标签。<authentication>