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