JWT
是JSON Web Token
的缩写。我们用大写的JWT
表示这种认证机制,我们用小写的jwt
来表示JWT
机制中的生成的token
,jwt
是一个字符串
阮一峰老师的文章非常清楚地介绍了如何生成jwt
这个token
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
拜读了阮一峰老师的文章,我知道了jwt
不仅是一个token
,它还是一个包含了其他信息的token
看了文章底下的评论,甚是精彩!我觉得该文还需要一些补充
认证流程
一:申请凭证jwt
:
- 客户端发送账号和密码给服务器
- 服务器查询数据库,认证成功后服务器返回凭证
jwt
为了防止伪造,需要确保
jwt
只能由服务端生成,实现方法阮一峰老师的文章有讲
二:拿着凭证jwt
访问服务器
- 把
jwt
放到HTTP
请求头的Authorization
字段里【当然可以放在其他位置,只要确保服务器可以拿到】 - 服务器拿到客户端提交的
jwt
之后,通过对jwt
里的字段进行签名运算来验证这个jwt
是否有效
签名运算只需要用到服务器的
secret
和jwt
里的其它信息【这样就不需要去查询数据库了】
总结
使用JWT
认证,服务器变成无状态了,从而比较容易实现扩展。
JWT
的最大缺点,由于服务器不保存session
状态,因此无法在使用过程中废止某个token
,或者更改 token
的权限。也就是说,一旦JWT
签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
说一句套话但绝对不是空话:还是需要根据实际应用场景选用认证方式的
使用案例
公司有一个对外提供的服务,用gRPC
实现,用户身份验证的时候使用了JWT
扩展阅读
技术博客迁移
技术博客已迁移到:
https://ziqiangxu.github.io/blog/
网友评论