最近,项目的安全认证机制全面采用 JWT。现在,趁整个工作基本告一段落之际,将一些知识点总结一下发布出来。
原因很简单,就以下几点:
JWT 由三部分组成:header + payload + signature,每部分是一个 Json 表示。最终的 Token 对这三部分进行编码之后的字符串,中间用“.”分割:
token = encodeBase64(header) + '.' + encodeBase64(payload) + '.' + encodeBase64(signature) # token is now:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI
在应用与服务器之间传递的就是上述字符串形式的 Token。
使用 JWT 的应用基本都遵循下面的使用流程:
对应的 request header 如下:
Authorization:Bearer <token>
整个过程如下图:
在一般的应用中,验证成功之后,服务器可能会在 Cookie 或 Session 中保留一些用户相关的额外信息,简化后续的编程,同时避免反复读取数据库。
在 JWT,同样可以实现这样的功能:只需将相应的内容放入 payload 即可。这样,下次从客户端发送的 token 中便可以解码得出。
验证 JWT 的有效性时,会考虑至少下面两点:
整个过程的编码其实并不复杂,请参见文后的链接,这里不再啰嗦。
出于安全性,注意以下几点:
以上是对 JWT 的旋风式说明,其他的内容,请参见参考文献。
觉得有帮助的话,不妨考虑购买付费文章来支持我们 🙂 :
付费文章