5.2基于JWT的令牌生成和定制「深刻浅出ASP.NET Core系列」

但愿给你3-5分钟的碎片化学习,多是坐地铁、等公交,聚沙成塔,水滴石穿,码字辛苦,若是你吃了蛋以为味道不错,但愿点个赞,谢谢关注。html

Token生成

  咱们知道一旦咱们给API添加[Authorize]后,等因而给资源增长了一道锁,这时候咱们Postman的时候是访问不了资源的,以下图所示:git

  

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

  配置JWT

  该配置在上一节已经实现了,这里再也不重复,能够访问这里复习。api

    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年有余,人不堪其忧,吾不改其乐,谢谢您关注。

  

相关文章
相关标签/搜索