希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注。

Token生成

  我们知道一旦我们给API添加[Authorize]后,等于是给资源增加了一道锁,这时候我们Postman的时候是访问不了资源的,如下图所示:

  

  这个时候,我们就需要通过Token来访问。这里需要分两个步骤来做,第一个是进行全局的JWT配置;第二个是生成Token函数的编写。

  配置JWT

  该配置在上一节已经实现了,这里不再重复,可以访问这里复习。

   Token的生成

  这节我们重点是生成Token。首先我们先建立一个Controller.cs并引入类库:

using Microsoft.IdentityModel.Tokens;
using Microsoft.Extensions.Options;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using System.Security.Claims;
using System.Text;
using System.IdentityModel.Tokens.Jwt;

  接下来,我们实现核心代码:为了排版美观,具体代码可以访问我的GitHub地址进行查看。如下图所示,我们通过核心类JwtSecurityToken以及Issuer,Audience,Credentials参数进行生成,具体如何生成可以参看源码逻辑,这里不进行深入探讨。

  

  Postman上输入账号和密码,返回Token如下图所示:

  

  我们把生成的这一串令牌拿到jwt官网进行验证,成功通过验证,如下图所示:

  

  使用Token访问资源

  有了Token我们就可以安全的访问我们的资源了,注意这里的token的生成,为了安全,设置了两个小时的时间期限,这个可以自己灵活把控。最后我们重新访问http://localhost:5000/api/values,结果出来了,如下图所示:

  

令牌的定制

  由于实现JWT的框架在Headers默认的KEY是Authorization,而且VALUE必须是bearer+空格+默认加密串。如果你习惯的KEY是用Token,VALUE是自定义的加密串。说白了就是把Authorization换成Token,VALUE的bearer和空格去掉,自由定义加密串(如下图所示),该怎么改造呢?

  

源码解析

  我们找到GitHub的源码一起来庖丁解牛。

  定位到关键点:Microsoft.AspNetCore.Authentication.JwtBearer项目下的JwtBearerHandler.cs文件,我们找到了默认实现的代码,如下图所示:

  

  问题来了,我们是不是要把源码的Authorization改成Token,然后去掉Bearer和空格呢?如果是这样做,当然太low了!那么如何再不修改源码的情况下做到对扩展的开放呢?

  微软的架构师已经帮我们考虑到扩展性这点了,我们要做的事情就很简单了,这里我们分两步来实现上面的定制:

1.自定义ValidateToken类

   通过实现ISecurityTokenValidator接口我们自定义了一个MyValidateToken类,内部假设我们的token值为myTokenSecret,当然,可以根据项目实际情况选择自定义加密方式。

  

2.配置验证服务

  我们在Startup.cs里通过AddJwtBearer把自定义的Token验证类添加进来。

  

  如上图所示,这里还要Clear一下,清除了验证方式,并重写Events的OnMessageReceived事件,在事件内部自定义获取的头部参数为token,当然你可以任意定义。

  最后我们做一个测试,我们输入参数名称为token,输入正确的token值,测试通过!如下图所示:

  

  至此整个改造和定制就算完成了,以上代码大部分是截图,截图看起来更加顺眼,虽然不方便复制,如果你想看完整代码可以访问我的GitHub地址

希望以上分享对你有帮助,我是IT人张飞洪,入行10年有余,人不堪其忧,吾不改其乐,谢谢您关注。

  

5.2基于JWT的令牌生成和定制「深入浅出ASP.NET Core系列」的更多相关文章

  1. 5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. Cookie-Based认证 认证流程 我们先看下传统Web端的认 ...

  2. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  3. asp.net core 系列 20 EF基于数据模型创建数据库

    一.概述 本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序.使用迁移(migrations)基于数据模型创建数据库,是一种cod ...

  4. 百度地图和高德地图坐标系的互相转换 四种Sandcastle方法生成c#.net帮助类帮助文档 文档API生成神器SandCastle使用心得 ASP.NET Core

    百度地图和高德地图坐标系的互相转换   GPS.谷歌.百度.高德坐标相互转换 一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记 ...

  5. ASP.NET Core系列:JWT身份认证

    1. JWT概述 JSON Web Token(JWT)是目前流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io JWT的实现方式是将用户信息存储在客户端,服务端不进行保存. ...

  6. ASP.NET CORE系列【四】基于Claim登录授权

    介绍 关于什么是Claim? 可以看看其他大神的文章: http://www.cnblogs.com/jesse2013/p/aspnet-identity-claims-based-authenti ...

  7. asp.net core系列 58 IS4 基于浏览器的JavaScript客户端应用程序

    一. 概述 本篇探讨使用"基于浏览器的JavaScript客户端应用程序".与上篇实现功能一样,只不过这篇使用JavaScript作为客户端程序,而非core mvc的后台代码Ht ...

  8. asp.net core系列 24 EF模型配置(主键,生成值,最大长度,并发标记)

    一.主键 键用作每个实体实例的主要唯一标识符. 使用关系数据库时,这会映射到主键的概念. 还可以配置不是主键的唯一标识符.按照约定,名为 Id 或 <type name>Id 的属性会配置 ...

  9. CZGL.Auth: ASP.NET Core Jwt角色授权快速配置库

    CZGL.Auth CZGL.Auth 是一个基于 Jwt 实现的快速角色授权库,ASP.Net Core 的 Identity 默认的授权是 Cookie.而 Jwt 授权只提供了基础实现和接口,需 ...

随机推荐

  1. Mac下MySQL无my-default.cnf

    转自https://www.jianshu.com/p/628bcf8bb557 As of MySQL 5.7.18, my-default.ini is no longer included in ...

  2. python爬虫入门(四)利用多线程爬虫

    多线程爬虫 先回顾前面学过的一些知识 1.一个cpu一次只能执行一个任务,多个cpu同时可以执行多个任务2.一个cpu一次只能执行一个进程,其它进程处于非运行状态3.进程里包含的执行单元叫线程,一个进 ...

  3. Flask构建微电影(二)

    第三章.项目分析.搭建目录及模型设计 3.1.前后台项目目录分析 微电影网站 前台模块 后台模块 前台(home) 数据模型:models.py 表单处理:home/forms.py 模板目录:tem ...

  4. python_字典 list_4

    >>> import string>>> import random #组合字符>>> x=string.ascii_letters+string ...

  5. 微信小程序-获取经纬度

    微信小程序-获取经纬度 最近公司新功能 要求在外的市场人员 发送位置信息回来. 用的还是微信小程序开发.... 微信小程序 提供一个接口 getLocation 这个接口反回来的位置 相对实际位置 相 ...

  6. Java 使用BigDecimal类处理高精度计算

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的 ...

  7. Linux时间子系统之五:低分辨率定时器的原理和实现

    专题文档汇总目录 Notes:低精度timer在内核中的数据结构以及API接口:低精度timer精巧高效的分组,使用cascade进行定时器移位,组内Timer FIFO:低精度Timer的初始化流程 ...

  8. Clloection接口 与List接口

    collection接口: collection是单列集合接口的根接口,该接口中又包含了多个集合接口,collection接口提供了很多操作集合的方法,比如添加元素的方法,删除元素的方法,修改元素的方 ...

  9. thymeleaf 专题

    Thymeleaf 之 内置对象.定义变量.URL参数及标签自定义属性 如标题所述,这篇文章主要讲述Thymeleaf中的内置对象(list解析.日期格式化.数字格式化等).定义变量.获取URL的参数 ...

  10. 微机原理基础(四)—— MSC51

    一.MCS51基本组成(STC89C52) CPU(8051CPU) + 存储器(4KB ROM/256B RAM)+外设(4组IO口,两个定时器,一个串口) 1.组成结构简图             ...