JWT(JSON-Web-Token)认证机制

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

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

拜读了阮一峰老师的文章,我知道了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简单解释open in new windowOAuth2的四种授权方式open in new window