JWT(JSON-Web-Token)认证机制
JWT 是JSON Web Token的缩写。我们用大写的JWT表示这种认证机制,我们用小写的jwt来表示JWT机制中的生成的token,jwt是一个字符串
阮一峰老师的文章非常清楚地介绍了如何生成jwt这个tokenhttp://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