JWT(JSON Web Token) 是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。
我们先将用户认证的操作描述成一个JSON对象。其中添加了一些其他的信息,帮助今后收到这个JWT的服务器理解这个JWT。
这里面的前6个字段都是由JWT的标准所定义的。
这些定义都可以在标准中找到。
将上面的JSON对象进行base64编码可以得到下面的字符串:
这个字符串我们将它称作JWT的Payload(载荷)。
如果你使用Node.js,可以用Node.js的包base64url来得到这个字符串:
注:Base64是一种编码,也就是说,它是可以被翻译回原来的样子来的。它并不是一种加密过程。
头部(Header)
JWT还需要一个头部,头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象:
在这里,我们说明了这是一个JWT,并且我们所用的签名算法(后面会提到)是HS256算法。
对它也要进行Base64编码,之后的字符串就成了JWT的Header(头部):
将上面的两个编码后的字符串都用句号.连接在一起(头部在前),就形成了:
最后,我们将上面拼接完的字符串用HS256算法进行加密。在加密的时候,我们还需要提供一个密钥(secret):
这样就可以得到我们加密后的内容:
这一部分又叫做签名。
最后将这一部分签名也拼接在被签名的字符串后面,我们就得到了完整的JWT:
JSON WEB TOKEN 用来解决跨域认证的问题,服务器认证后,生成JSON对象返回给客户端,服务器不保存session数据,所有数据都保存在客户端,每次请求都发回给服务器.
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
官方规定了7个官方字段
除了官方字段,可更具自己的服务自定义字段如:
对前面两个部分的签名。防止数据被篡改。使用header中指定的签名算法(默认是HMAC SHA256),按照下面的公式产生签名
user.controller.ts
auth.service.ts:
auth.module.ts
jwt.strategy.ts:
参考:
https://juejin.im/post/6844904097317912584