打开你的 web.config。
首先,您的 ActiveDirectory 需要 connectionString:
<connectionStrings>
...
<add name="ADConnectionString" connectionString=LDAP://*adserver*/DC=*domain* />
...
</connectionStrings>
向下滚动到<membership>
标签。确保为 设置了 defaultProvider 属性<membership>
,例如:
<membership defaultProvider="SimpleMembershipProvider">
然后在里面为 AD 成员添加新的提供者<providers>
:
<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" />
这应该对 web.config 有用。现在我们需要在登录时对 AD 用户进行身份验证。转到您的 AccountController 登录操作。首先我们尝试通过 ActiveDirectory 对用户进行身份验证PrincipalContext
,System.DirectoryServices.AccountManagement
命名空间中有一个方便的类。如果失败,我们使用默认的成员资格提供程序:
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);
}
对于您以后的要求,您可以使用 UserPrincipal 类获取当前登录的 ActiveDirectory 用户:
using (var context = new PrincipalContext( ContextType.Domain))
{
using (var aduser = UserPrincipal.FindByIdentity( context,IdentityType.SamAccountName, HttpContext.User.Identity.Name))
{
...
}
}
希望这会有所帮助,我没有错过任何东西。