我使用的是默认的ASP.NET 4.5框架的ASP.NET MVC 5项目模板。它配置了身份验证框架。
我想在我的项目中使用Window的Active Directory,所以我遵循了这篇文章 - http://www.schiffhauer.com/mvc-5-and-active-directory-authentication/
在我的AccountController的登录方法中,我有
if (Membership.ValidateUser(model.Email, model.Password))
{
CustomFormsAuthentication.SetAuthenticationCookie(model.Email, model, model.RememberMe);
return RedirectToAction("Index", "Home");
}
CustomFormsAuthentication类具有
的位置public static class CustomFormsAuthentication
{
public static void SetAuthenticationCookie(string username, object obj, bool isPersistent)
{
const int version = 1;
var json = new JavaScriptSerializer().Serialize(obj);
var cookieStoreTime = isPersistent ? DateTime.Now.AddDays(7): DateTime.Now.AddDays(1);
var ticket = new FormsAuthenticationTicket(version, username, DateTime.Now, cookieStoreTime, isPersistent, json);
HttpContext.Current.Response.Cookies.Set(new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(ticket)) {Expires = cookieStoreTime});
}
}
但用户从未通过身份验证。 User.Identity.IsAuthenticated仍然显示为false。
我该怎么做?
答案 0 :(得分:0)
身份与表单身份验证不兼容(在您的代码中由ASP.NET成员身份使用)。即使这样,表单身份验证也与Windows身份验证不兼容,后者也与Identity不兼容。如果要使用Windows凭据进行身份验证,则需要将Web.config更改为:
...
<system.web>
...
<authentication mode="Windows"/>
...
</system.web>
...
然后你几乎可以删除所有身份内容,因为它不再适用。
修改强>
在评论中讨论之后,最重要的一点是,ASP.NET中不支持多种形式的身份验证。您可以在技术上做一些变通方法,以便您基本上将身份验证代理到LDAP服务器以验证AD凭据,然后基于该用户创建/获取身份/成员资格用户以实际成为经过身份验证的用户。
但是,在这里,我没有看到任何真正的尝试,即使这样,你使用ASP.NET成员资格并形成auth来处理它,这排除了使用Identity。身份和表单身份验证彼此完全不兼容。