2016-05-04 10 views
1

MVC5では、ASP.Identityが古いフォーム認証を置き換えます。しかし、議論の通りhereしかし、FormsAuthenticationのタイプはまだ存在します。 According to Microsoft,FormsAuthentication with MVC5

しかし、私はまた、私はASP.NET MVC5を使用したいと私はユーザーID &を保存したい場合はライブラリも廃止されましたMicrosoft.Owin.Security.Forms(check this nuget link

はここに私のオプションは何ですか見つけSQLテーブル内のパスワード(例えば& aspnet_membershipのSQLテーブルをaspnet_users) (私たちは新しいOpenIdConnectに移動するまで、これは速い一時的な解決策になるはずです)

答えて

1

ASP.NETアイデンティティは、あなたが保存することができ、箱から出しクッキーベースの認証をサポートしていますDBのログイン"フォーム認証のような"メカニズムを持っています。デフォルトの表スキーマはメンバーシップと同じではありませんが、カスタマイズ可能です。

ブートストラップサンプル:

[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を次のように使用します。承認を必要としないアクションについては、[AllowAnonymous]と一緒にグローバルフィルタを適用します。

+0

mvcアプリケーションのグローバルAuthorizeAttributeの例を共有してください。 –

+0

@AbhishekB。、MVCのブートストラップ方法の検討を検討してください。グローバルフィルタが定義されています。 MVC.Net全体を質問の答えで説明しません。 –

+0

私はそれを..起動クラスの下で定義されている.. thankx –