2016-07-08 7 views
2

Я работаю над ядром asp.net, и я не понимаю некоторых вещей. , например, в mvc.net 5 можно фильтровать и разрешить действие с создать класс от AuthorizeAttribute и установить атрибут действий, как это:Пользовательские атрибуты авторизации в 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"); 
     } 
    } 

но в ядре asp.net мы не имеем AuthorizeAttribute ... как я могу настроить фильтр, как это в ядре asp.net для пользовательских действий?

ответ

7

Вы можете использовать промежуточное программное обеспечение аутентификации и Authorize attirbute для перенаправления страницы входа. Для вашего дела также используется AuthenticationScheme.

Первое использование (я предполагаю, что вы хотите использовать куки промежуточное программное обеспечение) аутентификации печенье промежуточного слоя:

 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 атрибут с этой схемой:

[Authorize(ActiveAuthenticationSchemes = "AdminCookieScheme")] 

Другой вариант использует UseWhen отделить администратора и аутентификация по умолчанию:

 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

Если вы имеете в виду другой способ без промежуточного программного обеспечения для проверки подлинности, я бы сказал «нет» для целей аутентификации. Но для ветвления (admin, default и т. Д.) Может быть другой способ, например, «MapWhen». –