您的位置:

深入理解JWT组成

一、JWT简介

JWT(JSON Web Token)是一种开放标准(RFC 7519),它定义了一种紧凑和自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。JWT 通常用于身份验证和授权。

JWT 可以被用作你的应用和服务之间的一系列安全信息的字符串。这种字符串可以被使用和传送,而不需要易受攻击的授权数据,比如用户名和密码。这可以被用来验证、保证和保护服务和客户端之间的一系列信息。

二、组成方式

一个JWT是一个纯文本字符串,由三个部分组成,它们之间由句点号(.)分隔:

1. Header:由两个参数组成:alg和typ,分别代表算法和token类型。

2. Payload:由三部分组成,标准中注册了七个部分(iss、sub、aud、exp、nbf、iat、jti),分别代表Issuer、Subject、Audience、Expiration Time、Not Before、Issued At、JWT ID。除此之外还可以定义私有字段,如用户ID、角色等。

3. Signature:将.Header和.Payload字符串拼接(由 . 隔开),再加上一个密钥,使用Header中指定的算法(如HMAC SHA256算法)生成一个字符串。

三、JWT验证流程

在用户登录成功后,服务器将JWT token发送给客户端,客户端将JWT token保存在本地(通常使用localStorage),在每次向服务器请求数据时,将token作为请求头部的Authorization字段发送到服务器。服务器使用密钥来验证token的合法性,如果token验证通过,则允许操作。

//示例代码
const jwt = require('jsonwebtoken');
const SECRET = 'YOUR_SECRET_KEY';

function createToken(payload) {
  return jwt.sign(payload, SECRET);
}

function validateToken(token) {
  try {
    return jwt.verify(token, SECRET);
  } catch (err) {
    return false;
  }
}

四、优点和缺点

优点:

1. JWT是基于token的机制,无需在服务器端追踪用户状态;

2. 基于JSON标准,易于使用和解析;

3. 支持跨语言、跨平台;

4. 基于标准,支持广泛的开发工具包。

缺点如下:

1. 若JWT被泄漏或者被破解,则攻击者可以访问相关资源;

2. JWT过期时间需要精细控制;

3. JWT一旦签发,无法撤回;

4. 在使用JWT时,最好避免在Payload部分存储敏感信息。

五、应用场景

JWT由于其轻量级、可携带性、易验证和跨语言性等特性,被广泛应用于单点登录、跨域授权、API请求身份验证、移动端验证、网站授权等领域。

六、总结

从以上几个方面深入理解JWT组成,更好的应用JWT,这将有助于实现更好的用户验证和授权管理。