首页 > 解决方案 > 有没有办法在 ASP.NET Core 的一个地方定义访问策略,类似于 Spring 安全的 antmatcher

问题描述

在 Spring Security 中,您可以在一个地方定义要授权的端点,例如

http.authorizeRequests()
  .antMatchers("/login").permitAll()
  .antMatchers("/admin/**").access("hasRole('ADMIN')")
  .antMatchers("/**").denyAll();

在 .NET 中,我可以通过添加带有 RequireAuthenticatedUser 的 AuthorizationPolicy 来创建默认拒绝策略:

      services.AddControllersWithViews(o =>
      {
        var policy = new AuthorizationPolicyBuilder()
          .RequireAuthenticatedUser()
          .Build();
        o.Filters.Add(new AuthorizeFilter(policy));
        o.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().AddRequirements(new endpoint))
      });

有没有办法在 .NET 中以与 Spring Security 中类似的方式定义我想要和不授权的路径,即在一个地方全部定义?

标签: asp.netasp.net-mvcasp.net-coreauthorization

解决方案


如果您需要禁用特定 url 的授权,例如登录页面,您可以[AllowAnonymous]在相应的操作上添加属性。

[Authorize]
public class AccountController : Controller
{
    [AllowAnonymous]
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

看看这个参考


推荐阅读