zoukankan      html  css  js  c++  java
  • Asp.Net Core--基于声明的授权

    翻译如下:

      当创建身份时,其可以被分配由可信方发布的一个或多个声明。 索赔是名称值对,表示主题是什么,而不是主体可以做什么。 例如,您可能有驾驶执照,由当地驾驶执照颁发。 您的驾驶执照上有您的出生日期。 在这种情况下,声明名称将是DateOfBirth,声明值将是您的出生日期,例如1970年6月8日,并且发行人将是驾驶执照授权。 基于声明的授权最简单地检查声明的价值,并允许基于该值访问资源。 例如,如果您想访问夜总会,授权过程可能是:

      保安员将评估您的出生日期的大小,以及他们是否信任发放者(驾驶执照当局),然后才允许您进入。

      身份可以包含具有多个值的多个声明,并且可以包含多个相同类型的声明。

    添加声明检查

      基于声明的授权检查是声明性的 - 开发者将它们嵌入他们的代码内,针对控制器或控制器内的动作,指定当前用户必须拥有的声明,以及可选地声明必须拥有的值来访问所请求的资源。 声明要求是基于策略的,开发人员必须构建并注册表达声明要求的策略。

      最简单的声明策略类型是查找声明的存在,而不检查值。

      首先,你需要建立和注册的政策。 这是授权服务配置的一部分,通常配置在Startup.cs文件中的ConfigureServices()。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    
        services.AddAuthorization(options =>
        {
            options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
        });
    }
    

      在这种情况下,EmployeeOnly策略检查对当前身份的EmployeeNumber声明的存在。

      然后,您可以使用AuthorizeAttribute属性上的Policy属性应用策略来指定策略名称;

    [Authorize(Policy = "EmployeeOnly")]
    public IActionResult VacationBalance()
    {
        return View();
    }
    

      AuthorizeAttribute特性可以应用于整个控制器,在这种情况下,只有匹配策略的标识将被允许访问控制器上的任何操作。

    [Authorize(Policy = "EmployeeOnly")]
    public class VacationController : Controller
    {
        public ActionResult VacationBalance()
        {
        }
    }
    

      如果您具有受“AuthorizeAttribute”特性保护的控制器,但希望允许匿名访问特定操作,则应用AllowAnonymous Attribute属性;

    [Authorize(Policy = "EmployeeOnly")]
    public class VacationController : Controller
    {
        public ActionResult VacationBalance()
        {
        }
    
        [AllowAnonymous]
        public ActionResult VacationPolicy()
        {
        }
    }
    

      大多数索赔有一个价值。 您可以在创建策略时指定允许值的列表。 以下示例将仅针对员工编号为1,2,3,4或5的员工成功。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    
        services.AddAuthorization(options =>
        {
            options.AddPolicy("Founders", policy =>
                              policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
        }
    }
    

     

    多重策略评估

      如果将多个策略应用于控制器或操作,则在授予访问权之前所有策略必须通过。 例如;

    [Authorize(Policy = "EmployeeOnly")]
    public class SalaryController : Controller
    {
        public ActionResult Payslip()
        {
        }
    
        [Authorize(Policy = "HumanResources")]
        public ActionResult UpdateSalary()
        {
        }
    }
    

      在上面的示例中,任何满足EmployeeOnly策略的标识都可以访问Payslip操作,因为在控制器上强制执行该策略。 但是,为了调用UpdateSalary操作,身份必须同时满足EmployeeOnly策略和HumanResources策略。

      如果你想要更复杂的政策,如生日申请的日期,计算从年龄,然后检查年龄是21岁或以上,那么你需要编写自定义策略处理程序。

  • 相关阅读:
    GNU make manual 翻译( 一百五十)
    [导入]Google开发者日见闻 王开源现身
    [导入]微软中国原高管宫力就任火狐中国总经理
    [导入]QQTalk Beta1 简体中文版
    [导入]《南方都市报》:国产龙芯产业化 难
    [导入][多图]Nokia正式发布奢华8600/6500双子手机
    [导入]用户界面设计的技巧与技术
    [导入]BitComet(比特彗星) 0.89
    [导入]µTorrent 1.7 beta 2248
    今天我注册了
  • 原文地址:https://www.cnblogs.com/duyao/p/5976202.html
Copyright © 2011-2022 走看看