希望给你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. 如何在自定义组件中使用v-model

    文章属于速记,有错误欢迎指出.风格什么的不喜勿喷. 先来一个组件,不用vue-model,正常父子通信 <!-- parent --> <template> <div c ...

  2. 【机器学习】使用gensim 的 doc2vec 实现文本相似度检测

    环境 Python3, gensim,jieba,numpy ,pandas 原理:文章转成向量,然后在计算两个向量的余弦值. Gensim gensim是一个python的自然语言处理库,能够将文档 ...

  3. springboot数据库连接池使用策略

    springboot官方文档介绍数据库连接池的使用策略如下: Production database connections can also be auto-configured using a p ...

  4. Java 领域从传统行业向互联网转型你必须知道的事儿

    我为什么要写这篇文章 武林中,"天下武功出少林"指各门各派的武功都与少林武学有一定的渊源,技术也是相同的道理,对于Java领域的应用而言,传统行业与互联网行业的技术都来自J2SE和 ...

  5. SSM-SpringMVC-06:SpringMVC关于静态资源无法展示的问题

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 按照之前的那种方式一路走下来,或许你没发觉有问题,只是你没有使用到而已 css,js,图片等无法正常使用怎么 ...

  6. Web测试——翻页功能测试用例

    参考:https://wenku.baidu.com/view/e6462707de80d4d8d15a4f1e.html?rec_flag=default&mark_pay_doc=2&am ...

  7. Java Persistence/ManyToMany

    A ManyToMany relationship in Java is where the source object has an attribute that stores a collecti ...

  8. 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150  评论- ...

  9. 玩转CSS3(一)----CSS3实现页面布局

    请珍惜小编劳动成果,该文章为小编原创,转载请注明出处. 摘要:     CSS3相对CSS2增加了一些新的布局方式:多栏布局和盒子布局.在这篇文章中,将对CSS2的布局进行简单的回忆,并总结CSS3的 ...

  10. python之12306自动查票

      一.导读 本篇文章所采用的技术仅用于学习.研究,任何其他用途请自行承担后果. 12306自动查票使用到的python库主要是splinter,同时也涉及到查票的城市编码,具体的城市编码请在网络上搜 ...