三分钟学会.NET Core Jwt 策略授权认证
一.前言
大家好我又回来了,前几天讲过一个关于Jwt的身份验证最简单的案例,但是功能还是不够强大,不适用于真正的项目,是的,在真正面对复杂而又苛刻的客户中,我们会不知所措,就现在需要将认证授权这一块也变的复杂而又实用起来,那在专业术语中就叫做自定义策略的API认证,本次案例运行在.NET Core 3.0中,最后我们将在swagger中进行浏览,来尝试项目是否正常,对于.NET Core 2.x 版本,这篇文章有些代码不适用,但我会在文中说明。
二.在.NET Core中尝试
我们都知道Jwt是为了认证,微软给我们提供了进城打鬼子的城门,那就是 AuthorizationHandle。
我们首先要实现它,并且我们还可以根据依赖注入的 AuthorizationHandlerContext 来获取上下文,就这样我们就更可以做一些权限的手脚
首先,我们重写了 HandleRequirementAsync 方法,如果你看过AspNetCore的源码你一定知道,它是Jwt身份认证的开端,也就是说你重写了它,原来那一套就不会走了,我们观察一下源码,我贴在下面,可以看到这就是一个最基本的授权,通过 context.Succeed(requirement 完成了最后的认证动作!
那么 Succeed 是一个什么呢?它是一个在 AuthorizationHandlerContext的定义动作,包括Fail() ,也是如此,当然具体实现我们不在细谈,其内部还是挺复杂的,不过我们需要的是 DenyAnonymousAuthorizationRequirement 被当作了抽象的一部分。
好吧,言归正传(看源码挺刺激的),我们刚刚在 PolicyHandler实现了自定义认证策略,上面还说到了两个方法。现在我们在项目中配置并启动它,并且我在代码中也是用了Swagger用于后面的演示。
在 AddJwtBearer中我们添加了jwt验证包括了验证参数以及几个事件处理,这个很基本,不在解释。不过在Swagger中添加jwt的一些功能是在 AddSecurityDefinition 中写入的。
在以上代码中,我们通过鉴权模式添加了认证规则,一个名叫 PolicyRequirement 的类,它实现了 IAuthorizationRequirement 接口,其中我们需要定义一些规则,通过构造函数我们可以添加我们要识别的权限规则。那个UserName就是 Attribute 。
随后我们应当启动我们的服务,在.NET Core 3.0 中身份验证的中间件位置需要在路由和端点配置的中间。
我们通常会有一个获取token的API,用于让Jwt通过 JwtSecurityTokenHandler().WriteToken(token) 用于生成我们的token,虽然jwt是没有状态的,但你应该也明白,如果你的jwt生成了随后你重启了你的网站,你的jwt会失效,这个是因为你的密钥进行了改变,如果你的密钥一直写死,那么这个jwt将不会再过期,这个还是有安全风险的,这个我不在这里解释,gettoken定义如下:
可能比较特别的是 AllowAnonymous ,这个看我文章的同学可能头一次见,其实怎么说好呢,这个可无可有,没有硬性的要求,我看到好几个知名博主加上了,我也加上了~...最后我们创建了几个资源控制器,它们是受保护的。
在你添加策略权限的时候例如政策名称是XXX,那么在对应的api表头就应该是XXX,随后到了 PolicyHandler我们解析了 Claims 处理了它是否有权限。
三.效果图
四.栗子源代码和以往版本
看到很多前辈彩的坑,原来的 (context.Resource as Microsoft.AspNetCore.Routing.RouteEndpoint); 实际上在.NET Core 3.0 已经不能用了,原因是.NET Core 3.0 启用 EndpointRouting 后,权限filter不再添加到 ActionDescriptor ,而将权限直接作为中间件运行,同时所有filter都会添加到 endpoint.Metadata ,如果在.NET Core 2.1 & 2.2 版本中你通常Handler可以这么写:
该案例源代码在我的Github上:https://github.com/zaranetCore/aspNetCore_JsonwebToken/tree/master/Jwt_Policy_Demo 谢谢大家
三分钟学会.NET Core Jwt 策略授权认证相关推荐
- 三分钟学会css3中的flexbox布局
2019独角兽企业重金招聘Python工程师标准>>> 这篇文章里我们将学习CSS里flexbox布局的几个最重要的概念,通过学习flexbox布局,你会发现以往遇到的所有的关于布局 ...
- Juniper 210 密码清不掉_三分钟学会如何找回mysql密码
一.在测试工作中我们肯定会写一些sq查询语句方便我们验证数据是否正确,从而判断当前软件是否存在缺陷,但是查询的过程中肯定需要我们先连接数据库,如果数据库密码忘记我们就无法完成工作,这里就教会大家如何快 ...
- 三分钟学会PS小清新调色教程-萧蕊冰
今天的PS小教程教你三分钟学会PS小清新调色教程.夏天到了,夏天的阳光很大,拍出的照片都会有一种暖色的感觉,那么我们怎么把一张照片调成日式小清新呢?今天我们就来学一个PS小清新调色教程,让你体验一下日 ...
- WORD如何设置打印? 三分钟学会WORD打印技巧
我们在办公的时候,很多人时常会需要打印各种各样的文件,很多人都只知道,去打印当前页,或者是整个文档,但在Word打印中也有很多不同的技巧,那么Word如何设置打印?今天呢就来给大家分享一下Word打印 ...
- 【ROM制作工具】如何三分钟学会制作手机线刷包?一键制作线刷包详细教程
如何在最短的时间内制作一款手机线刷包让卡顿的手机线刷回官方?线刷回官方的手机刷机包在制作时有什么样的技巧?接下来将和大家分享一下如何在三分钟制作一款手机线刷包! 一键制作线刷包详细教程 准备工作: 首 ...
- springsecurity整合jwt实现授权认证,权限分配
1.前期准备工作 1.1首先需要导入jwt依赖和springsecurity的依赖 <!--security 依赖 --><dependency><groupId> ...
- 三分钟集成连连支付方法(以认证支付为例)
以前使用的都是直接对接的银联支付,最近项目开始使用连连支付,由于连连的开发文档稍微简陋一点,所以在这里跟大家分享一下,这里以认证支付为例: 首先可以下载一下连连的官方demo,拿到我们需要的资源,也可 ...
- asp 文本转时间_三分钟学会在ASP.NET Core MVC 中使用Cookie
一.Cookie是什么? 我的朋友问我cookie是什么,用来干什么的,可是我居然无法清楚明白简短地向其阐述cookie,这不禁让我陷入了沉思:为什么我无法解释清楚,我对学习的方法产生了怀疑!所以我们 ...
- 三分钟学会.NET微服务之Polly
熔断降级是一个非常重要的概念,我们先说一下什么是熔断降级,咱们都知道服务发现,一个有问题的服务器没来得急注销过一会就崩溃掉了,那么我们的请求就有可能访问一个已经崩溃的服务器,那么就会请求失败,因为已经 ...
最新文章
- 解决Eclipse查看源代码出现Source not found的问题
- mac java sh_怎么在Mac上下载java?
- mysql示例employees数据库
- JavaMail操作的总结(1)
- 技术研究院005---如何基于DDD构建微服务架构
- java过滤器命名_java 过滤指定后缀文件
- CTP接口封装相关贴---集合
- 易语言代码转换python_易语言通过文本解析的方式把C代码转换成易代码
- java递归遍历文件夹下所有文件
- 小米平板4twrp一键刷入工具_不要浪费小米10的双扬声器!杜比全景音刷入教程分享...
- 华为路由器时区以及时间配置
- Camunda流程引擎及表结构认识
- 通俗易懂讲讲手机通信芯片那些事儿
- C++实现基于区块链的物流信息存储系统
- 如何正确安装朗文英文当代大词典(2CD版)
- 计算机和语言学的交叉,计算语言学与传统语言学的区别
- c语言编写一个程序计算某年某月有几天,c语言编写程序,输入某年某月,求该月的天数...
- 小编推荐这款,超实用的SpringBoot 开源商城系统,挣钱不是太轻松!
- android申请悬浮窗代码,三行代码实现Android应用内悬浮窗,无需一切权限,适配所有ROM和厂商...
- 大数据之hadoop
热门文章
- Java设计模式(8)组合模式(Composite模式)
- 隐藏UITableView当没有数据或数据不够的时候出现的分割线.
- Struts2和Struts1的不同
- 短语密码_使用密码短语以提高安全性
- Mysql-高可用集群[MyCat中间件使用](三)
- vim编辑和命令模式、实践
- 在win10系统下怎样快速切换任务视图
- gitlab永久设置密码
- 最具体的历史centos下一个 postfix + extmail + dovecot + maildrop 安装注意事项2014更新...
- video.js html5 视频播放器