43

我正在開發一個MVC3應用程序,該應用程序將要求用戶針對AD進行身份驗證。我知道MVC3中有一個選項可以創建一個Intranet應用程序,該應用程序可以根據AD自動驗證用戶身份,但它使用Windows身份驗證並自動將其登錄。這個應用程序可以在'Open'工作站上訪問,用戶需要輸入他們的用戶名和密碼。任何示例或在線教程都會很棒。一個示例項目將是例外。ASP.NET MVC - 根據Active Directory對用戶進行身份驗證,但要求輸入用戶名和密碼

回答

43

您可以使用窗體身份驗證標準的Internet應用程序模板,並插入一個ActiveDirectoryMembershipProviderweb.config

<connectionStrings> 
    <add name="ADConnectionString" connectionString="LDAP://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> 

這樣你得到的互聯網應用程序模板登錄表單,並驗證對AD爲您服務。

然後這只是一些AccountController清理的問題,以刪除重置密碼/更改密碼/註冊功能,只留下登錄。

+0

我們如何爲MVC4做到這一點? – 2013-09-24 13:05:53

+0

@JamesHarpe它是一樣的... – Rovdjuret 2014-02-25 13:46:14

+1

它如何與ASP.NET Core(MVC 6)一起使用? – 2016-03-28 13:03:08

10

如上所述,您可以使用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 - 然後閱讀this article爲替代方案:

+0

我認爲它應該是Membership.ValidateUser而不是MembershipService.ValidateUser – r03 2012-11-20 10:39:50

+1

cpoDesign可能使用他自己的服務來驗證用戶,即'MembershipService'。在它內部,他可能使用'MembershipService.ValidateUser'。 – 2013-03-25 12:48:19

相關問題