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岁或以上,那么你需要编写自定义策略处理程序。
Asp.Net Core--基于声明的授权的更多相关文章
- ASP.NET Core 基于声明的访问控制到底是什么鬼?
从ASP.NET 4.x到ASP.NET Core,内置身份验证已从基于角色的访问控制(RBAC)转变为基于声明的访问控制(CBAC). 我们常用的HttpContext.User属性ASP.NET ...
- ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇
在这篇文章中,我将继续ASP.NET Identity 之旅,这也是ASP.NET Identity 三部曲的最后一篇.在本文中,将为大家介绍ASP.NET Identity 的高级功能,它支持声明式 ...
- asp.net core系列 49 Identity 授权(上)
一.概述 授权是指用户能够访问资源的权限,如页面数据的查看.编辑.新增.删除.导出.下载等权限.ASP.NET Core 授权提供了多种且灵活的方式,包括:Razor pages授权约定.简单授权.R ...
- ASP.NET Core 基于JWT的认证(一)
ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...
- Asp.Net Core基于JWT认证的数据接口网关Demo
近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...
- ASP.NET Core 基于JWT的认证(二)
ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...
- ASP.NET Core基于K8S的微服务电商案例实践--学习笔记
摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...
- Security » Authorization » 基于声明的授权
Claims-Based Authorization¶ 基于声明的授权 142 of 162 people found this helpful When an identity is created ...
- ASP.NET Core - 基于IHttpContextAccessor实现系统级别身份标识
问题引入: 通过[ASP.NET Core[源码分析篇] - 认证]这篇文章中,我们知道当请求通过认证模块时,会给当前的HttpContext赋予当前用户身份标识,我们在需要授权的控制器中打上[Aut ...
随机推荐
- 重新走过HTML,那些让我amazing 的标签
这一次我用了短暂的时间重新梳理了html的标签(包括html5 新增),发现我以前忽略了很多又轻巧又精美且实用的标签,总结如下: 格式标签: <address> 标签: 定义文档或文章的作 ...
- NYOJ 333
http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...
- selenium自动化-java-IE启动
这是一个方法,直接在main调用就可以 private static void ie() { WebDriver Driver; // ie启动成功,files是启动ie驱动 ...
- simpleCart的简单使用及配置
simpleCart的功能就不用解释,购物车,很6.官网上的说明太模糊了,还是GIHUb上的好一点:https://github.com/wojodesign/simplecart-js/ 文章解决问 ...
- [转载]jQuery中wrap、wrapAll和wrapInner用法以及区别
原文地址:jQuery中wrap.wrapAll和wrapInner用法以及区别作者:伊少君 原文: <ul> <li title='苹果'>苹果</li> ...
- 安卓开发:一种快速提取安卓app的UI图标资源的方法
在做安卓设计时,找美工设计界面的漂亮图标是必不可少的,但是对于一个初创团队来说,请一个UI的成本其实也挺高的,此时对于一个偏技术的产品经理来说,从其他成熟的产品的apk中提取图标就是一个很便捷的方法, ...
- AppBox升级进行时 - 扁平化的权限设计
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. AppBox v2.0中的权限实现 AppBox v2.0中权限管理中涉及三个 ...
- angularjs + fis +modJS 对于支持amd规范的组建处理(PhotoSwipe 支持,百度webUpload支持)
这不是很好的处理方式,但是能够解决问题,希望有大神推荐更好的方式. 前端模块使用angularjs + fis +modJS 开发前端应用有两个月了.总结了以下的优点: fis 自动构建,自动发布,功 ...
- 【Python】[面向对象高级编程] 多成继承,定制类,使用枚举
1.多成继承 class SmallDog(Animal,Dog) pass MixIn就是一种常见的设计. 2.定制类类似__slots__这种形如 __xxx__ 的变量或者函数名,在python ...
- TAC 坦克队
The Art of Code 团队成员 组长: 031402330吴宇轩 组员: 031402509胡泽善 031402224彭 巍 031402230张建明 031402508 ...