JWT(JSON Web Token)认证机制

JWTJSON Web Token的缩写。我们用大写的JWT表示这种认证机制,我们用小写的jwt来表示JWT机制中的生成的tokenjwt是一个字符串

阮一峰老师的文章非常清楚地介绍了如何生成jwt这个token
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

拜读了阮一峰老师的文章,我知道了jwt不仅是一个token,它还是一个包含了其他信息的token
看了文章底下的评论,甚是精彩!我觉得该文还需要一些补充

认证流程

一:申请凭证jwt

  1. 客户端发送账号和密码给服务器
  2. 服务器查询数据库,认证成功后服务器返回凭证jwt

为了防止伪造,需要确保jwt只能由服务端生成,实现方法阮一峰老师的文章有讲

二:拿着凭证jwt访问服务器

  1. jwt放到HTTP请求头的Authorization字段里【当然可以放在其他位置,只要确保服务器可以拿到】
  2. 服务器拿到客户端提交的jwt之后,通过对jwt里的字段进行签名运算来验证这个jwt是否有效

签名运算只需要用到服务器的secretjwt里的其它信息【这样就不需要去查询数据库了】

总结

使用JWT认证,服务器变成无状态了,从而比较容易实现扩展。
JWT的最大缺点,由于服务器不保存session状态,因此无法在使用过程中废止某个token,或者更改 token的权限。也就是说,一旦JWT签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
说一句套话但绝对不是空话:还是需要根据实际应用场景选用认证方式的

使用案例

公司有一个对外提供的服务,用gRPC实现,用户身份验证的时候使用了JWT

扩展阅读

OAuth2简单解释
OAuth2的四种授权方式

技术博客迁移

技术博客已迁移到:
https://ziqiangxu.github.io/blog/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。