一.前言

  大家好我又回来了,前几天讲过一个关于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 策略授权认证相关推荐

  1. 三分钟学会css3中的flexbox布局

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章里我们将学习CSS里flexbox布局的几个最重要的概念,通过学习flexbox布局,你会发现以往遇到的所有的关于布局 ...

  2. Juniper 210 密码清不掉_三分钟学会如何找回mysql密码

    一.在测试工作中我们肯定会写一些sq查询语句方便我们验证数据是否正确,从而判断当前软件是否存在缺陷,但是查询的过程中肯定需要我们先连接数据库,如果数据库密码忘记我们就无法完成工作,这里就教会大家如何快 ...

  3. 三分钟学会PS小清新调色教程-萧蕊冰

    今天的PS小教程教你三分钟学会PS小清新调色教程.夏天到了,夏天的阳光很大,拍出的照片都会有一种暖色的感觉,那么我们怎么把一张照片调成日式小清新呢?今天我们就来学一个PS小清新调色教程,让你体验一下日 ...

  4. WORD如何设置打印? 三分钟学会WORD打印技巧

    我们在办公的时候,很多人时常会需要打印各种各样的文件,很多人都只知道,去打印当前页,或者是整个文档,但在Word打印中也有很多不同的技巧,那么Word如何设置打印?今天呢就来给大家分享一下Word打印 ...

  5. 【ROM制作工具】如何三分钟学会制作手机线刷包?一键制作线刷包详细教程

    如何在最短的时间内制作一款手机线刷包让卡顿的手机线刷回官方?线刷回官方的手机刷机包在制作时有什么样的技巧?接下来将和大家分享一下如何在三分钟制作一款手机线刷包! 一键制作线刷包详细教程 准备工作: 首 ...

  6. springsecurity整合jwt实现授权认证,权限分配

    1.前期准备工作 1.1首先需要导入jwt依赖和springsecurity的依赖 <!--security 依赖 --><dependency><groupId> ...

  7. 三分钟集成连连支付方法(以认证支付为例)

    以前使用的都是直接对接的银联支付,最近项目开始使用连连支付,由于连连的开发文档稍微简陋一点,所以在这里跟大家分享一下,这里以认证支付为例: 首先可以下载一下连连的官方demo,拿到我们需要的资源,也可 ...

  8. asp 文本转时间_三分钟学会在ASP.NET Core MVC 中使用Cookie

    一.Cookie是什么? 我的朋友问我cookie是什么,用来干什么的,可是我居然无法清楚明白简短地向其阐述cookie,这不禁让我陷入了沉思:为什么我无法解释清楚,我对学习的方法产生了怀疑!所以我们 ...

  9. 三分钟学会.NET微服务之Polly

    熔断降级是一个非常重要的概念,我们先说一下什么是熔断降级,咱们都知道服务发现,一个有问题的服务器没来得急注销过一会就崩溃掉了,那么我们的请求就有可能访问一个已经崩溃的服务器,那么就会请求失败,因为已经 ...

最新文章

  1. 解决Eclipse查看源代码出现Source not found的问题
  2. mac java sh_怎么在Mac上下载java?
  3. mysql示例employees数据库
  4. JavaMail操作的总结(1)
  5. 技术研究院005---如何基于DDD构建微服务架构
  6. java过滤器命名_java 过滤指定后缀文件
  7. CTP接口封装相关贴---集合
  8. 易语言代码转换python_易语言通过文本解析的方式把C代码转换成易代码
  9. java递归遍历文件夹下所有文件
  10. 小米平板4twrp一键刷入工具_不要浪费小米10的双扬声器!杜比全景音刷入教程分享...
  11. 华为路由器时区以及时间配置
  12. Camunda流程引擎及表结构认识
  13. 通俗易懂讲讲手机通信芯片那些事儿
  14. C++实现基于区块链的物流信息存储系统
  15. 如何正确安装朗文英文当代大词典(2CD版)
  16. 计算机和语言学的交叉,计算语言学与传统语言学的区别
  17. c语言编写一个程序计算某年某月有几天,c语言编写程序,输入某年某月,求该月的天数...
  18. 小编推荐这款,超实用的SpringBoot 开源商城系统,挣钱不是太轻松!
  19. android申请悬浮窗代码,三行代码实现Android应用内悬浮窗,无需一切权限,适配所有ROM和厂商...
  20. 大数据之hadoop

热门文章

  1. Java设计模式(8)组合模式(Composite模式)
  2. 隐藏UITableView当没有数据或数据不够的时候出现的分割线.
  3. Struts2和Struts1的不同
  4. 短语密码_使用密码短语以提高安全性
  5. Mysql-高可用集群[MyCat中间件使用](三)
  6. vim编辑和命令模式、实践
  7. 在win10系统下怎样快速切换任务视图
  8. gitlab永久设置密码
  9. 最具体的历史centos下一个 postfix + extmail + dovecot + maildrop 安装注意事项2014更新...
  10. video.js html5 视频播放器