2016-05-04 5 views
1

В MVC5 ASP.Identity заменяет аутентификацию старой формы. Однако в соответствии с обсуждением here Тип FormsAuthentication все еще существует. According to Microsoft,FormsAuthentication с MVC5

Но я также нашел Microsoft.Owin.Security.Forms библиотеки также устаревшую (check this nuget link)

Каковы мои варианты здесь, если я хочу использовать ASP.NET MVC5 и я хочу, чтобы хранить идентификатор пользователя & пароль в таблице SQL (например aspnet_users & таблицы aspnet_membership SQL) (это должно быть быстрым временным решением, пока не переедет в новое OpenIdConnect)

ответ

1

ASP.NET Идентичность поддерживает проверку подлинности на основе печенья из коробки, что позволяет хранить логины в БД и имеющий механизм «формы, подобный аутентификации». Схема таблиц по умолчанию не совпадает с членством, но настраивается.

Бутстрапирования образец:

[assembly: OwinStartup(typeof(YourNamespace.Startup))] 
namespace YourNamespace 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      var options = GetCookieOptions(); 
      app.UseCookieAuthentication(options); 
     } 

     public static CookieAuthenticationOptions GetCookieOptions() 
     { 
      var options = new CookieAuthenticationOptions 
      { 
       AuthenticationType = 
        DefaultAuthenticationTypes.ApplicationCookie, 
       SlidingExpiration = true, 

       // On ajax calls, better have a 401 rather than a redirect 
       // to an HTML login page. 
       // Taken from http://brockallen.com/2013/10/27/using-cookie-authentication-middleware-with-web-api-and-401-response-codes/ 
       Provider = new CookieAuthenticationProvider 
       { 
        OnApplyRedirect = ctx => 
        { 
         if (!IsAjaxRequest(ctx.Request)) 
         { 
          // Patching by the way the absolute uri using http 
          // instead of https, when we are behind a lb 
          // terminating the https: returning only 
          // PathAndQuery 
          ctx.Response.Redirect(new Uri(ctx.RedirectUri) 
           .PathAndQuery); 
         } 
        } 
       } 
      }; 

      if (!string.IsNullOrEmpty(Settings.Default.LoginPath)) 
       options.LoginPath = new PathString(Settings.Default.LoginPath); 
      if (!string.IsNullOrEmpty(Settings.Default.AuthCookieName)) 
       options.CookieName = Settings.Default.AuthCookieName; 
      if (!string.IsNullOrEmpty(Settings.Default.AuthCookieDomain)) 
       options.CookieDomain = Settings.Default.AuthCookieDomain; 
      if (Settings.Default.ForceSecuredCookie) 
       options.CookieSecure = CookieSecureOption.Always; 
      return options; 
     } 

     // Taken from http://brockallen.com/2013/10/27/using-cookie-authentication-middleware-with-web-api-and-401-response-codes/ 
     private static bool IsAjaxRequest(IOwinRequest request) 
     { 
      var query = request.Query; 
      if (query != null && StringComparer.OrdinalIgnoreCase.Equals(
       query["X-Requested-With"], "XMLHttpRequest")) 
       return true; 
      var headers = request.Headers; 
      return headers != null && StringComparer.OrdinalIgnoreCase.Equals(
       headers["X-Requested-With"], "XMLHttpRequest"); 
     } 
    } 
} 

(. Settings.Default. пользовательские свойства конфигурации проекта в той выборке)

вход, вход из образца:

UserManager<IdentityUser> yourUserManager; 

public bool SignIn(string login, string password, bool rememberMe) 
{ 
    var user = yourUserManager.Find(userName, password); 
    if (user == null) 
     return false; 
    var expiration = rememberMe ? 
     Settings.Default.PermanentAuthCookieExpiration : 
     Settings.Default.AuthCookieExpiration; 

    var authenticationManager = 
     HttpContext.Current.GetOwinContext().Authentication; 

    var claimsIdentity = yourUserManager.CreateIdentity(user, 
     DefaultAuthenticationTypes.ApplicationCookie); 
    authenticationManager.SignIn(
     new AuthenticationProperties 
     { 
      AllowRefresh = true, 
      IssuedUtc = DateTime.UtcNow, 
      ExpiresUtc = DateTime.UtcNow.AddMinutes(expiration), 
      IsPersistent = rememberMe 
     }, claimsIdentity); 
    return true; 
} 

public void IIdentityUserManager.SignOut() 
{ 
    var authenticationManager = 
     HttpContext.Current.GetOwinContext().Authentication; 
    authenticationManager.SignOut(); 
} 

И, конечно же, с MVC используйте AuthorizeAttribute as глобальный фильтр вместе с [AllowAnonymous] о действиях, которые не требуют авторизации.

+0

, пожалуйста, поделитесь примером на глобальном AuthorizeAttribute в приложении mvc. –

+0

@AbhishekB., Подумайте о том, как загружается MVC. Здесь определяются глобальные фильтры. Я не буду объяснять весь MVC.Net в ответе на вопрос. –

+0

Я получил его .. определено под классами Startup .. thankx –