2015-02-04 4 views
0

Я использую шаблон проекта ASP.NET MVC 5 по умолчанию ASP.NET 4.5. Он настроен с учетом подлинности.Как аутентифицировать пользователя в среде ASP.NET Identity?

Я хочу использовать 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

Идентификация несовместима с проверкой подлинности форм (используется членом ASP.NET здесь в вашем коде). Даже тогда аутентификация форм несовместима с Windows auth, что также несовместимо с Identity. Если вы хотите проверить подлинность с помощью учетных данных Windows, то вам необходимо изменить Web.config, чтобы:

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

И тогда вы можете в значительной степени просто удалить все Идентичность вещи, как это не будет работать больше.

EDIT

Наиболее важным моментом здесь после обсуждения в комментариях, что множественные формы аутентификации одновременно является сценарий не поддерживается в ASP.NET. Вы можете технически выполнять обходные пути таким образом, чтобы вы в основном прокси-аутентификации на LDAP-сервере проверяли учетные данные AD, а затем создавали/получали пользователь Identity/Membership на основе этого, чтобы фактически быть аутентифицированным пользователем.

Однако здесь я не вижу реальной попытки сделать это, и даже тогда вы используете членство ASP.NET и формируете auth для его обработки, что исключает использование Identity. Идентичность и формы auth полностью несовместимы друг с другом.

+0

Не [полностью верно] (http://stackoverflow.com/questions/2250921/mixing-forms-authentication-with-windows-authentication). Вы можете одновременно запускать вход в Windows и AD, просто берет некоторую изящество. Вам также понадобится реализовать свой собственный механизм входа, наблюдая за «LOGON_USER». Кроме того, вы можете создать свое собственное промежуточное ПО Owin, которое попытается выполнить рукопожатие. –

+0

У меня есть два типа логина. Один из них - это вход в систему windows, а другой - это sql login. – Yasser

+0

@BradChristie. Хотя да, вы можете это сделать .. это уже не поддерживаемый сценарий в IIS или ASP.NET. Он может быть взломан, но его уродливый и, вероятно, склонный к большему сбою в будущем ... –

Смежные вопросы