翻译如下:

  当创建身份时,其可以被分配由可信方发布的一个或多个声明。 索赔是名称值对,表示主题是什么,而不是主体可以做什么。 例如,您可能有驾驶执照,由当地驾驶执照颁发。 您的驾驶执照上有您的出生日期。 在这种情况下,声明名称将是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岁或以上,那么你需要编写自定义策略处理程序。

Asp.Net Core--基于声明的授权的更多相关文章

  1. ASP.NET Core 基于声明的访问控制到底是什么鬼?

    从ASP.NET 4.x到ASP.NET Core,内置身份验证已从基于角色的访问控制(RBAC)转变为基于声明的访问控制(CBAC). 我们常用的HttpContext.User属性ASP.NET ...

  2. ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇

    在这篇文章中,我将继续ASP.NET Identity 之旅,这也是ASP.NET Identity 三部曲的最后一篇.在本文中,将为大家介绍ASP.NET Identity 的高级功能,它支持声明式 ...

  3. asp.net core系列 49 Identity 授权(上)

    一.概述 授权是指用户能够访问资源的权限,如页面数据的查看.编辑.新增.删除.导出.下载等权限.ASP.NET Core 授权提供了多种且灵活的方式,包括:Razor pages授权约定.简单授权.R ...

  4. ASP.NET Core 基于JWT的认证(一)

    ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...

  5. Asp.Net Core基于JWT认证的数据接口网关Demo

    近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...

  6. ASP.NET Core 基于JWT的认证(二)

    ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...

  7. ASP.NET Core基于K8S的微服务电商案例实践--学习笔记

    摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...

  8. Security » Authorization » 基于声明的授权

    Claims-Based Authorization¶ 基于声明的授权 142 of 162 people found this helpful When an identity is created ...

  9. ASP.NET Core - 基于IHttpContextAccessor实现系统级别身份标识

    问题引入: 通过[ASP.NET Core[源码分析篇] - 认证]这篇文章中,我们知道当请求通过认证模块时,会给当前的HttpContext赋予当前用户身份标识,我们在需要授权的控制器中打上[Aut ...

随机推荐

  1. UVALive - 3942 Remember the Word[树状数组]

    UVALive - 3942 Remember the Word A potentiometer, or potmeter for short, is an electronic device wit ...

  2. java多线程系类:JUC锁:01之框架

    本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下:01. Java多线程系列--"JUC锁"01之 框架02. Java多线程系列--"JUC锁&q ...

  3. 为普通Object添加类似AttachedProperty的属性

    为普通Object添加类似AttachedProperty的属性   周银辉 我们知道,在WPF中对应一个DependencyObject,我们很容易通过AttachedProperty来为类型附加一 ...

  4. SQL Left Join, Right Join, Inner Join, and Natural Join 各种Join小结

    在SQL语言中,存在着各种Join,有Left Join, Right Join, Inner Join, and Natural Join等,对于初学者来说肯定一头雾水,都是神马跟神马啊,它们之间到 ...

  5. 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考 ...

  6. Android开发自学笔记(Android Studio)—4.5 ProgressBar及其子类

    一.前言 ProgressBar本身代表了进度条组件,它还派生出了两个常用的组件:SeekBar和RatingBar,他们的使用方法类似,只是显示界面有一定的区别.我们看一下API文档中的说明: 从图 ...

  7. java-工具类-读取配置文件

    java读取配置文件,当发现文件被修改后则重新加载 package com.zg.config; import java.io.File; import java.io.FileInputStream ...

  8. zend studio(Eclipse)和PyDev搭建Python开发环境

    原文是用Eclipse作开发环境,由于我已经装了zs,而zs也是基于Eclipse的,一试之下发现可以用,呵呵省事了.原文:http://www.cnblogs.com/Realh/archive/2 ...

  9. 12.3 Arithmetic-software-

    一.流程图: 二.软件功能: 分为混合模式和单则模式,混合模式生成指定题数的任意四则混合运算,数字是1-10之间随机:单则模式是生成指定题数的加减乘除中指定的某一则运算,数字是1-10之间随机. 用户 ...

  10. tensrflow python [defunct]

    在ubuntu上面安装了GPU版本的tensorflow后,很容易碰到zombie thread 的问题,无法正常关闭tensorflow的线程,用ps aux|grep python可以看到 pyt ...