JSON WEB TOKEN

为了在网络应用环境间传输声明而执行的一种基于JSON的开放标准 被设计为紧凑且安全的,适用于分布式站点的单点登录

传统的session认证

基于session的认证是应用本身很难扩展

  1. session session保存在内存中,随着认证用户增加,服务端开销明显增大
  2. 扩展性 服务端做认证记录,用户下次请求必须在这台服务器上,限制了扩展的能力
  3. CSRF 基于cookie认证会遭到伪造的攻击
基于token的鉴权机制

无状态 为扩展提供了便利

  1. 用户使用用户名密码登录
  2. 服务器发送给用户token
  3. 客户端存储token 并在每次请求都附加token
  4. 服务端验证token 并返回数据
JWT构成
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
header
{
'typ':"JWT",
"alg":"HS256"
}

进行base64加密

playload

存放有效信息 (base64加密)

  • 标准中注册的声明
  • 公共声明
  • 私有声明
   **iss**: jwt签发者
  **sub**: jwt所面向的用户
   **aud**: 接收jwt的一方
   **exp**: jwt的过期时间,这个过期时间必须要大于签发时间
   **nbf**: 定义在什么时间之前,该jwt都是不可用的.
  **iat**: jwt的签发时间
  **jti**: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
{
"sub":"1234567",
"name":"johen",
"admin":true
}
signature

签名部分 base64(header) + "." + base64(payload) 在加盐 HA256加密
加盐是保存在服务端

优点 服务器只保存secret


忘却°
15 声望0 粉丝

下一篇 »
vue学习

引用和评论

0 条评论