2016-07-08 13 views
2

私はasp.netコアで作業していますが、私はいくつかのことを理解していません。このようなアクションにAuthorizeAttributeおよび属性セットからクラスを作成すると、我々は行動をフィルタリングして許可することができるmvc.net 5に例えば :ASP.NETコアのカスタム認可属性

public class AdminAuthorize : AuthorizeAttribute { 
     public override void OnAuthorization(AuthorizationContext filterContext) { 
      base.OnAuthorization(filterContext); 
      if (filterContext.Result is HttpUnauthorizedResult) 
       filterContext.Result = new RedirectResult("/Admin/Account/Login"); 
     } 
    } 

が、asp.netコアに、我々はAuthorizeAttributeを持っていない... どのように私はカスタムアクションのasp.netコアでこのようなフィルタを設定できますか?

答えて

7

認証ミドルウェアとAuthorize attirbuteを使用すると、ログインページをリダイレクトできます。あなたの場合もAuthenticationSchemeを使用して妥当と思われます。

まず使用(私はあなたがクッキーのミドルウェアを使用したいと仮定)クッキー認証ミドルウェア:別のオプションは、管理者を区切るためにUseWhenを使用している

[Authorize(ActiveAuthenticationSchemes = "AdminCookieScheme")] 

:その後、

 app.UseCookieAuthentication(new CookieAuthenticationOptions() 
     { 
      AuthenticationScheme = "AdminCookieScheme", 
      LoginPath = new PathString("/Admin/Account/Login/"), 
      AccessDeniedPath = new PathString("/Admin/Account/Forbidden/"), 
      AutomaticAuthenticate = true, 
      AutomaticChallenge = true, 
      CookieName="AdminCookies" 
     }); 

と、この方式でAuthorize属性を使用デフォルト認証:

 app.UseWhen(x => x.Request.Path.Value.StartsWith("/Admin"), builder => 
     { 
      builder.UseCookieAuthentication(new CookieAuthenticationOptions() 
      { 
       LoginPath = new PathString("/Admin/Account/Login/"), 
       AccessDeniedPath = new PathString("/Admin/Account/Forbidden/"), 
       AutomaticAuthenticate = true, 
       AutomaticChallenge = true 
      }); 
     }); 

そしてAuthorize属性を使用してください。

+0

別の方法がありますか? – Moein

+0

認証ミドルウェアがない別の方法を意味するなら、私は認証目的のために "いいえ"と言っています。しかし、分岐(管理者、デフォルトなど)には 'MapWhen 'のような別の方法があるかもしれません。 –

関連する問題