在写博客项目的时候接触到一个jwt的node包,就了解了一下概念。
1. 什么是jwt
JWT(Json Web Token)是一个允许我们使用JWT在用户和服务器之间传递安全可靠的信息。
JWT就是一个字符串,由头部(header),载荷(payload)与签名(signature)组成。
2. 是怎么生成的
头部(Header)
用于描述关于该JWT的最基本信息。如其类型和签名所用的算法。
对该JSON对象进行Base64编码,就成了JWT的头部
载荷(Payload)
用于描述操作的信息,帮助服务器理解这个JWT
可以在标准中找到字段
将改JSON对象进行base64编码,得到的字符串称为payload
签名(signature)
将头部和载荷的字符串用.链接在一起,然后将拼接完的字符串用HS256(之前描述的)算法进行加密,加密时还需要一个密钥(secret),比如为luck(保存在服务器端),就可以得到加密的结果,即签名
服务器在接收到JWT后,会先对头部和载荷的内容用同一算法再次签名,若token不同则说明被动过(比如载荷被修改,加密的结果就不同)
请求会被拦截,jwt的信息容易破解(base64解码)容易暴露,故不能用来传输敏感信息。
常用于设计用户认证和授权系统,下订单等。
3.和session有什么区别
- token是存客户端的,每次加在请求的头部发给服务器。不适合负载的接口校验?
- session是存在服务端的