JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。每个部分都是经过Base64编码的JSON字符串。
1:头部(Header):
- 头部通常包含两个信息:令牌类型(typ)和所用的加密算法(alg)。
- 令牌类型(typ)指示该令牌类型为JWT。
- 加密算法(alg)指示用于对令牌进行签名的算法,例如HMAC、RSA或者其他加密算法。
- 头部示例:
{"alg": "HS256","typ": "JWT"}
2:载荷(Payload):
- 载荷是JWT的主要内容,包含了一些称为声明(Claims)的信息。
- 声明可以分为三种类型:注册声明(Registered Claims)、公共声明(Public Claims)和私有声明(Private Claims)。
- 注册声明是一些预定义的声明,包括iss(签发者)、sub(主题)、aud(受众)、exp(过期时间)等。
- 公共声明是自定义的声明,不会与JWT规范冲突。
私有声明是用于在JWT的使用上下文中定义的自定义声明,以满足应用程序的特定需求。 - 载荷示例:
{"iss": "example.com","sub": "user123","exp": 1635724800
}
3:签名(Signature):
- 签名是使用私钥对头部和载荷进行签名的结果,以验证JWT的完整性和真实性。
- 签名通常使用头部中指定的加密算法进行计算。
- 签名示例:
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)
在JWT中,头部和载荷是Base64编码的字符串,可以通过解码来获取其内容。
签名是使用私钥对头部和载荷进行签名的结果,用于验证JWT的完整性和真实性。在验证JWT时,服务器会使用相同的算法和密钥进行签名计算,并将计算结果与JWT中的签名进行比对,以确保JWT未被篡改。