Otwórz swój web.config.
Przede wszystkim trzeba ConnectionString dla ActiveDirectory:
<connectionStrings>
...
<add name="ADConnectionString" connectionString=LDAP://*adserver*/DC=*domain* />
...
</connectionStrings>
Przewiń do tagu <membership>
. Upewnij się, że masz defaultProvider atrybut ustawiony dla <membership>
, jak:
<membership defaultProvider="SimpleMembershipProvider">
Następnie dodać nowego dostawcę dla członków AD wewnątrz <providers>
:
<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" />
To powinno wystarczyć do web.config. Teraz musimy uwierzytelniać użytkowników AD w logowaniu. Przejdź do akcji logowania AccountController. Najpierw próbujemy uwierzytelnić użytkownika za pośrednictwem ActiveDirectory, istnieje przydatna klasa o nazwie PrincipalContext
w przestrzeni nazw System.DirectoryServices.AccountManagement
. Jeśli to nie używamy domyślnego dostawcę członkostwa:
public ActionResult Login(LoginModel model, string returnUrl)
{
try
{
// try to auth user via AD
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
if (pc.ValidateCredentials(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, false);
return RedirectToAction("Index", "Home");
}
}
// try the default membership auth if active directory fails
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, false);
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Login failed");
}
}
catch
{
}
GetErrorsFromModelState();
return View(model);
}
Dla późniejszych wymagań można uzyskać bieżący zalogowany użytkownik z ActiveDirectory UserPrincipal Klasa:
using (var context = new PrincipalContext(ContextType.Domain))
{
using (var aduser = UserPrincipal.FindByIdentity(context,IdentityType.SamAccountName, HttpContext.User.Identity.Name))
{
...
}
}
nadzieję, że pomoże i nie przegapić byle co.