但愿给你3-5分钟的碎片化学习,多是坐地铁、等公交,聚沙成塔,水滴石穿,码字辛苦,若是你吃了蛋以为味道不错,但愿点个赞,谢谢关注。html
咱们知道一旦咱们给API添加[Authorize]后,等因而给资源增长了一道锁,这时候咱们Postman的时候是访问不了资源的,以下图所示:git
这个时候,咱们就须要经过Token来访问。这里须要分两个步骤来作,第一个是进行全局的JWT配置;第二个是生成Token函数的编写。github
该配置在上一节已经实现了,这里再也不重复,能够访问这里复习。api
这节咱们重点是生成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的生成,为了安全,设置了两个小时的时间期限,这个能够本身灵活把控。最后咱们从新访问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了!那么如何再不修改源码的状况下作到对扩展的开放呢?
微软的架构师已经帮咱们考虑到扩展性这点了,咱们要作的事情就很简单了,这里咱们分两步来实现上面的定制:
经过实现ISecurityTokenValidator接口咱们自定义了一个MyValidateToken类,内部假设咱们的token值为myTokenSecret,固然,能够根据项目实际状况选择自定义加密方式。
咱们在Startup.cs里经过AddJwtBearer把自定义的Token验证类添加进来。
如上图所示,这里还要Clear一下,清除了验证方式,并重写Events的OnMessageReceived事件,在事件内部自定义获取的头部参数为token,固然你能够任意定义。
最后咱们作一个测试,咱们输入参数名称为token,输入正确的token值,测试经过!以下图所示:
至此整个改造和定制就算完成了,以上代码大部分是截图,截图看起来更加顺眼,虽然不方便复制,若是你想看完整代码能够访问个人GitHub地址
但愿以上分享对你有帮助,我是IT人张飞洪,入行10年有余,人不堪其忧,吾不改其乐,谢谢您关注。