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

Token生成

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

  

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

  配置JWT

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

   Token的生成

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

  1. using Microsoft.IdentityModel.Tokens;
  2. using Microsoft.Extensions.Options;
  3. using Microsoft.AspNetCore.Authentication.JwtBearer;
  4. using System.Security.Claims;
  5. using System.Text;
  6. 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. LeeCode数组第15题三数之和

    题目:三数之和 内容: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中 ...

  2. 源码安装xadmin及使用

    xadmin是django的第三方后台 我们也可以使用pip来安装,但是推荐使用源码安装. 因为有些新功能以及发布在GitHub上,但是还未发布到pypi上,我们就可以提取使用这些功能. 一.安装 1 ...

  3. C Primer Plus 第9章 函数 编程练习

    复习题: 8. int choice(int a,int b,int c){ int max; max = a; if (b > max) max = b; if (c > max) ma ...

  4. 【转】JavaScript 错误处理与调试——“错误处理”的注意要点

    try-catch语句 该语句最适合处理那些我们无法控制的错误,在明明白白地知道自己的代码会发生错误时,再使用该语句就不太合适了. ECMA-262第3版引入了try-catch语句,基本的语法如下所 ...

  5. 主成分分析PCA详解

    转载请声明出处:http://blog.csdn.net/zhongkelee/article/details/44064401 一.PCA简介 1. 相关背景 上完陈恩红老师的<机器学习与知识 ...

  6. linux安装vsftpd服务器

    最近看到python的网络编程,看到用python写ftp客户端的小项目,打算着手连连.为了模仿真实环境,我并没有在本机上开个ftp服务器,选择了在虚拟机中的linux中做ftp服务器,我选择了vsf ...

  7. 激活IDEA 2017.3 mac版 2018.05.21亲测可用

    本文激活方式不会导致IEDA打不开,可激活一年,最简便方式,只需要30秒. 1.修改hosts sudo vim /private/etc/hosts 在文件最后一行中添加: 0.0.0.0 acco ...

  8. this.state.menuList.toArray()[0].get('id')

    用toArray()处理传过来的list用get(")获取里面的值 而我用的是attributes得方法

  9. 35.app后端搜索入门

    现在人们的网络生活已经离不开搜索了,遇到不懂的问题,想知道的事情,搜索一下,就知道答案. 在app中,最常见的搜索情景就是搜索用户.只有几百,几千的用户量时,可以直接用用like这样的模糊查询,但是, ...

  10. selenium chromedriver与谷歌浏览器版本映射表

    chromedriver版本 支持的Chrome版本 v2.35 v62-64 v2.34 v61-63 v2.33 v60-62 v2.32 v59-61 v2.31 v58-60 v2.30 v5 ...