ASP.NET Core 中的自定义授权属性
Custom authorization attributes in ASP.NET Core
我正在研究 asp.net 核心,但有些事情我不明白。
例如在 mvc.net 5 中,我们可以使用 AuthorizeAttribute 创建 class 来过滤和授权操作,并将属性设置为这样的操作:
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 核心中为自定义操作设置这样的过滤器?
您可以使用身份验证中间件和 Authorize
属性来重定向登录页面。对于您的情况,也使用 AuthenticationScheme
似乎是合理的。
第一次使用(我假设你想使用cookie中间件)cookie认证中间件:
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
属性。
我正在研究 asp.net 核心,但有些事情我不明白。 例如在 mvc.net 5 中,我们可以使用 AuthorizeAttribute 创建 class 来过滤和授权操作,并将属性设置为这样的操作:
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 核心中为自定义操作设置这样的过滤器?
您可以使用身份验证中间件和 Authorize
属性来重定向登录页面。对于您的情况,也使用 AuthenticationScheme
似乎是合理的。
第一次使用(我假设你想使用cookie中间件)cookie认证中间件:
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
属性。