JWT的定义及其组成

JavaScript016

JWT的定义及其组成,第1张

JWT 的定义及其组成

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