ASP.NET Core 中的自定义授权属性

2024-04-12

我正在研究 asp.net core,但我不明白一些事情。 例如,在 mvc.net 5 中,我们可以使用 AuthorizeAttribute 创建类来过滤和授权操作,并将属性设置为操作,如下所示:

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 core 中我们没有 AuthorizeAttribute ... 我如何在 ASP.NET Core 中为自定义操作设置这样的过滤器?


您可以使用身份验证中间件和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 https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Samples/blob/cdc53b2a132b73bc10fd4dcbb91b169634a589a1/samples/Mvc/Mvc.Server/Extensions/AppBuilderExtensions.cs分离管理员和默认身份验证:

      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属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core 中的自定义授权属性 的相关文章

随机推荐