程序员

JWT 鉴权

2018-11-06  本文已影响9人  殷天文

JWT 是什么

JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON对象安全传输信息。这些信息可以通过数字签名进行验证和信任。

JWT 的组成

JWT 的格式为 xxx.yyy.zzz。
包含 Header(头部),Payload(负载),Signature(签名)三部分。

{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "sub": "1234567890",
  "name": "Taven",
  "admin": true
}
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

这段伪代码已经很好的讲解了,签名是如何计算的。服务端提供一个secret,将header、payload 进行base64编码,然后使用header中声明的算法计算签名。

JWT 与 传统session 对比

  1. 性能:JWT 轻量级,而session 会占用大量服务端内存;
  2. 部署:使用session的系统 负载均衡需要考虑 session 共享,而JWT 不需要;
  3. 安全:安全性的话,小弟不敢多说,我觉得五五开吧,有人说 JWT 泄露的话,直接就可以登录了。但是使用 session 如果请求被拦截了都是一样的;
  4. 场景:APP 中由于没有cookie吧,多是使用token。而 web 应用的话,使用 token 和 session 都是可以的。

实现思路

简单一句话就是,登录之后服务端给客户端颁发JWT,客户端将 JWT 放在请求头中,服务端 filter 校验http header中的JWT。

查阅了一些资料后发现一些分歧

demo :https://gitee.com/yintianwen7/taven-springboot-learning/tree/master/spring-boot-jwt

评论区欢迎各位朋友沟流

上一篇下一篇

猜你喜欢

热点阅读