ASP.NET MVC – 根据Active Directoryvalidation用户,但要求input用户名和密码
我正在开发一个MVC3应用程序,要求用户通过AD进行身份validation。 我知道在MVC3中有选项来创build一个Intranet应用程序,它可以根据AD自动validation用户,但它使用Windows身份validation并自动login。 这个应用程序可以在“开放”工作站上访问,用户需要input他们的用户名和密码。 任何示例或在线教程将是伟大的。 一个示例项目将是例外。
您可以使用带有表单身份validation的标准Internet应用程序模板,并将ActiveDirectoryMembershipProvider
插入到web.config
:
<connectionStrings> <add name="ADConnectionString" connectionString="YOUR_AD_CONN_STRING" /> </connectionStrings> <system.web> <authentication mode="Forms"> <forms name=".ADAuthCookie" loginUrl="~/Account/LogOn" timeout="15" slidingExpiration="false" protection="All" /> </authentication> <membership defaultProvider="MY_ADMembershipProvider"> <providers> <clear /> <add name="MY_ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" /> </providers> </membership> </system.web>
通过这种方式,您可以获得Internet应用程序模板login表单,并根据您的AD进行validation。
那么这只是一些AccountController
清理的问题,以删除重置密码/更改密码/注册function只留下login。
如上所述,您可以使用web.config文件中定义的成员资格提供程序。
下面的代码是在MVC 3模板代码的“AccountController”的实现中,并且稍微修改了一下以使用ActiveDirectory:
[HttpPost] public ActionResult LogOn( LogOnModel model, string returnUrl ) { if( ModelState.IsValid ) { // Note: ValidateUser() performs the auth check against ActiveDirectory // but make sure to not include the Domain Name in the User Name // and make sure you don't have the option set to use Email Usernames. if( MembershipService.ValidateUser( model.UserName, model.Password ) ) { // Replace next line with logic to create FormsAuthenticationTicket // to encrypt and return in an Http Auth Cookie or Session Cookie // depending on the 'Remember Me' option. //FormsService.SignIn( model.UserName, model.RememberMe ); // Fix this to also check for other combinations/possibilities if (!String.IsNullOrEmpty(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } } else { ModelState.AddModelError("", "The user name or password provided is incorrect."); } }
如果使用.NET 3.5,请阅读以下文章 :