如何在ASP.NET Identity框架中对用户进行身份验证?

时间:2015-02-04 16:16:50

标签: c# asp.net asp.net-mvc

我使用的是默认的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。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

身份与表单身份验证不兼容(在您的代码中由ASP.NET成员身份使用)。即使这样,表单身份验证也与Windows身份验证不兼容,后者也与Identity不兼容。如果要使用Windows凭据进行身份验证,则需要将Web.config更改为:

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...

然后你几乎可以删除所有身份内容,因为它不再适用。

修改

在评论中讨论之后,最重要的一点是,ASP.NET中不支持多种形式的身份验证。您可以在技术上做一些变通方法,以便您基本上将身份验证代理到LDAP服务器以验证AD凭据,然后基于该用户创建/获取身份/成员资格用户以实际成为经过身份验证的用户。

但是,在这里,我没有看到任何真正的尝试,即使这样,你使用ASP.NET成员资格并形成auth来处理它,这排除了使用Identity。身份和表单身份验证彼此完全不兼容。