2016-07-08 20 views
2

Ich arbeite auf asp.net Core und ich verstehe einige Dinge nicht. zum Beispiel in mvc.net 5 können wir filtern und Aktion autorisieren mit create Klasse von AuthorizeAttribute und setzen Attribut Aktionen wie folgt aus:Benutzerdefinierte Autorisierungsattribute in ASP.NET Core

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"); 
     } 
    } 

aber in asp.net Kern haben wir nicht AuthorizeAttribute ... Wie kann ich Filter wie diese in asp.net Kern für benutzerdefinierte Aktionen festlegen?

Antwort

7

Sie können die Authentifizierungs-Middleware und Authorize attibrude verwenden, um die Anmeldeseite umzuleiten. Für Ihren Fall scheint auch die Verwendung von AuthenticationScheme sinnvoll.

Erster Einsatz (Ich gehe davon aus Sie Cookie-Middleware verwenden) Cookie-Authentisierung Middleware:

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

und verwenden Sie dann Authorize Attribut mit diesem Schema:

[Authorize(ActiveAuthenticationSchemes = "AdminCookieScheme")] 

Eine weitere Option ist mit UseWhen trennen Admin und Standardauthentifizierung:

 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 
      }); 
     }); 

Und dann einfach Authorize Attribut verwenden.

+0

gibt es einen anderen Weg? – Moein

+0

Wenn Sie einen anderen Weg ohne Authentifizierung Middleware meinen, würde ich "Nein" für die Authentifizierung sagen. Aber zum Verzweigen (Admin, Standard usw.) gibt es möglicherweise einen anderen Weg wie "MapWhen". –