5.2基于JWT的令牌生成和定制「深入浅出ASP.NET Core系列」
希望给你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年有余,人不堪其忧,吾不改其乐,谢谢您关注。
- 菜鸟入门【ASP.NET Core】12:JWT 设计解析及定制
- 2.3Options建立配置和实体的映射「深入浅出ASP.NET Core系列」
- 2.4配置的热更新「深入浅出ASP.NET Core系列」
- 基于ASP.NET Core数据保护生成验证token示例
- ASP.NET CORE系列【四】基于Claim登录授权
- 深入浅出ASP.NET Core系列(入门篇)
- 2.5配置的框架浅析「深入浅出ASP.NET Core系列」
- 1.1专题介绍「深入浅出ASP.NET Core系列」
- 3.1依赖注入「深入浅出ASP.NET Core系列」
- 4.2WebHost配置「深入浅出ASP.NET Core系列」
- ASP.NET Core ResponseCaching:基于 VaryByHeader 定制缓存 Key
- 4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」
- 目录导航「深入浅出ASP.NET Core系列」
- 1.2环境安装「深入浅出ASP.NET Core系列」
- 1.3创建项目「深入浅出ASP.NET Core系列」
- 1.6部署到CentOS「深入浅出ASP.NET Core系列」
- 4.3dotnet watch run「深入浅出ASP.NET Core系列」
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1
- asp.net core 2.0 web api基于JWT自定义策略授权
- 2.5配置的框架浅析「深入浅出ASP.NET Core系列」