由于工作需要写一个下载文件的api,要求要有jwt token验证,想着正好可以在Core中试试水,下面是整个开发过程;
由于开始并不懂jwt,在网上找了些相关的资料,对于使用Core api + jwt的文章并不多,这个文章看起来有很多东西:https://www.cnblogs.com/CreateMyself/p/11123023.html,下面是跟着此文章进行的操作,以及自己的一些想法;
jwt由三部分构成,基本范式是:
- {"alg":"HS256","typ":"JWT"}
- {"sub":"BY","nbf":1575448305,"exp":1575448905}
- 加密串1234567890123456
详细说明:
1.第一部分以Base64编码的Header主要包括Token的类型和所使用的算法,我的理解是定义的一个标准模板,基本使用范式即可
2.第二部分以Base64编码的Payload主要包含的是声明(Claims);我的理解是这个地方携带一些用户自定义的信息,但由于jwt的原理(下面会说),第一部分和第二部分使用的加密只是base64的编码转换,不存在加密,所以保存的信息都是次要信息
3.第三部分则是将Key通过对应的加密算法生成签名,最终三部分以点隔开;也就是通过自己的key把上面两部分加密,且这个加密是不可逆的,也就是只会存在前面两部分被修改,或者第三部分被修改,但都会失去自洽性,也就是通过这个验证;
虽然原理说起来简单,但实际操作起来就头大了,下面说下整个过程,
首先,我们先建立一个Core 3.0版的控制台,然后把必要的分层什么的建立起来
基本的分层没什么说的,mvc架构加上连数据库的MongoFactory,定义zip生成和下载方法的Ziphelper,由于不是本节重点,此处不做演示;(tokenHlper请忽略)
下面我们开始考虑加上jwt验证,都知道现在在vs里搞东西第一步就是去拿Nuget包,支持jwt的需要这两个包
System.IdentityModel.Tokens.Jwt和Microsoft.AspNetCore.Authentication.JwtBearer
然后我们需要生成jwt的token
在这我直接在 zipHelper里面写了个GetToken的方法:
public string GetToken()
{
var claims = new Claim[]
{
new Claim(JwtRegi