【问题标题】:c# .Net Core 2.1 Authorize Attribute - Default Claimsc# .Net Core 2.1 授权属性 - 默认声明
【发布时间】:2020-01-30 21:52:07
【问题描述】:

当使用 [Authorize] 属性(不指定策略)时,有没有办法在默认策略上设置所需的声明?

关键是我希望它需要声明才能授权,但我不想为控制器明确设置策略。我宁愿只有 [Authorize] 而不是 [Authorize(Policy = "something")]

问这个问题的另一种方式是,是否可以在默认策略中添加声明?

在此先感谢您提出的任何想法和意见。

【问题讨论】:

    标签: c# asp.net-core asp.net-core-2.0 authorize-attribute


    【解决方案1】:

    您可以在启动时覆盖默认策略

    services.AddAuthorization(options =>
    {
        options.DefaultPolicy = new AuthorizationPolicyBuilder()
                                          .RequireClaim("CLAIM")
                                          .Build();
    });
    

    另外,如果你想通过一些自定义策略进行授权并避免多次写入策略,你可以创建一个新的授权属性

    public class AuthorizePolicyAttribute : AuthorizeAttribute
    {
        public AuthorizePolicyAttribute()
        {
            Policy = "CustomPolicy";
        }
    }
    

    【讨论】:

      【解决方案2】:

      为了防止误报错误(即您忘记将 [Authorize] 属性放在数百个操作方法或控制器之一中,并且熟练的黑客以某种方式到达了该端点),您还可以向控制器添加约定以便它们自动具有 [Authorize] 属性。如果您确实不需要某些操作方法或控制器的授权,则可以使用 [AllowAnonymous] 属性。

      首先,您必须创建一个新的授权策略并将其添加到您的 Startup.cs 类中 ConfigureServices 方法下的服务中:

      services.AddAuthorization(o => {    
          o.AddPolicy("authwithsomepolicy", p =>
          {
              p.RequireAuthenticatedUser();
              p.RequireClaim("MYPOLICY");
          }); 
      });
      

      然后您创建一个扩展 IControllerModelConvention 的新类,并为您的所有控制器实现该策略的自动化:

      public class AddAuthorizeFilters : IControllerModelConvention
      {
          public void Apply(ControllerModel controller)
          {
              controller.Filters.Add(new AuthorizeFilter("authwithsomepolicy"));            
          }
      }
      

      最后,在您的 Startup.cs 类中,您可以将此约定添加到您的 Mvc 系统中(再次在 ConfigureServices 方法下):

      public void ConfigureServices(IServiceCollection services)
      {
          services.AddMvc(setupAction =>
          {
              setupAction.Conventions.Add(new AddAuthorizeFilters ());
          });
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 2020-07-21
        • 2019-07-31
        • 2020-07-21
        • 2017-09-16
        相关资源
        最近更新 更多