43

girilen gerektirir. MVC3'te bir kullanıcıyı bir AD'ye karşı otomatik olarak doğrulayan bir Intranet Uygulaması oluşturma seçeneğinin olduğunu biliyorum, ancak Windows Kimlik Doğrulaması'nı kullanıyor ve bunları otomatik olarak günlüğe kaydediyor. Bu uygulamaya, kullanıcının Etki Alanı Kullanıcı Adı ve Parola bilgilerini girmesi gereken 'Açık' iş istasyonlarında erişilebilir. Herhangi bir örnek veya çevrimiçi eğitici harika olurdu. Örnek bir proje olağanüstü olurdu.ASP.NET MVC - Active Directory ile yetki, ancak kullanıcı adı ve şifre Bir AD karşı kimlik doğrulaması için bir kullanıcı gerektirecektir bir MVC3 uygulama geliştiriyorum

cevap

43

Sen form kimlik doğrulaması ile standart Internet uygulaması şablonu kullanmak ve insert bir ActiveDirectoryMembershipProviderweb.config içine edebilirsiniz:

<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> 

Internet uygulama şablonu giriş formunu olsun Bu şekilde, ve sizin için AD karşı doğrular.

Sonra/şifre sıfırlama/değiştirme şifresini kaldırmak sadece Girişi bırakarak işlevselliği kayıt için bazı AccountController temizleme meselesi bu.

+0

nasıl MVC4 için yapabilirsiniz? –

+0

@JamesHarpe Onun aynı ... – Rovdjuret

+1

Ve ASP.NET Çekirdek (MVC 6) ile nasıl kullanılabileceğini? –

10

Yukarıda belirtildiği gibi, web.config dosyasında tanımlanan üyelik sağlayıcısı kullanabilirsiniz.

Aşağıdaki kod MVC 3 Şablon kodundan 'AccountController' uygulanması içindedir ve biraz ActiveDirectory ile çalışmak için modifiye edilmiş :

[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 kullanıyorsanız - o zaman için this article okumak alternatif:

+0

Ben Membership.ValidateUser yerine MembershipService.ValidateUser – r03

+1

cpoDesign muhtemelen bir kullanıcı, yani 'MembershipService' doğrulamak için kendi hizmetini kullanıyor olması gerektiğini düşünüyorum. İçinde muhtemelen 'MembershipService.ValidateUser' kullanır. –

İlgili konular