JWT生成的token的构成部分
JWT(JSON Web Token)生成的Token由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),各部分通过英文句点.连接。以下是具体内容及作用解析:
1. 头部(Header)
- 作用:声明Token类型和签名算法。
- 内容: - typ:固定为- "JWT",表示Token类型。
- alg:签名算法,如- HS256(HMAC SHA256)、- RS256(RSA SHA256)等。
 
- 编码方式:JSON对象通过Base64URL编码为字符串,例如: {"alg": "HS256", "typ": "JWT"} // 编码后:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
2. 载荷(Payload)
- 作用:携带用户信息及声明(Claims),包括标准字段和自定义数据。
- 内容: - 标准声明(官方建议但不强制使用): - iss(Issuer):签发者(如服务端域名)。
- sub(Subject):主题(如用户ID)。
- aud(Audience):接收方(如客户端应用ID)。
- exp(Expiration Time):Token过期时间(Unix时间戳)。
- nbf(Not Before):生效时间。
- iat(Issued At):签发时间。
- jti(JWT ID):唯一标识。
 
- 自定义声明:开发者可添加业务相关字段,如用户角色、权限、用户名等。例如: {"userId": 123, "role": "admin"} // 编码后:eyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIn0
 
- 标准声明(官方建议但不强制使用): 
- 编码方式:JSON对象通过Base64URL编码,但不加密(明文可见)。
3. 签名(Signature)
- 作用:验证Token完整性和真实性,防止篡改。
- 生成方式: - 拼接编码后的Header和Payload:base64UrlEncode(Header) + "." + base64UrlEncode(Payload)。
- 使用Header中声明的算法(如HS256)和服务器端密钥(Secret Key)加密生成签名。
 // 示例:使用HMAC SHA256生成签名 signature = HMACSHA256(headerBase64 + "." + payloadBase64, secretKey);
- 拼接编码后的Header和Payload:
- 验证方式:服务端用相同算法和密钥重新计算签名,与Token中的签名比对是否一致。
完整Token示例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIiwiaWF0IjoxNzM1NDc4MDA1fQ.GromRG7kK90UfU_Q5iOSHs_xE-zSk0e0HLHqJQUjYMU- 分解: - 头部:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9(解码后为{"alg":"HS256","typ":"JWT"})。
- 载荷:eyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIiwiaWF0IjoxNzM1NDc4MDA1fQ(解码后包含用户ID、角色、签发时间)。
- 签名:GromRG7kK90UfU_Q5iOSHs_xE-zSk0e0HLHqJQUjYMU。
 
- 头部:
注意事项
- 敏感信息:Payload内容未加密,避免存储密码等敏感数据。
- 有效期:通过exp字段控制Token过期时间,建议设置较短的有效期(如2小时)。
- 密钥安全:签名密钥(Secret Key)必须严格保密,泄露将导致Token可被伪造。
如需生成或验证JWT,可使用工具库如Java的JWTUtil(Hutool)、Node.js的jsonwebtoken或Python的PyJWT。
