JWT的全称是JSON Web Token。它是一种用于在网络上安全地传输信息的开放标准(RFC 7519)。JWT由三部分组成:头部、载荷和签名。头部包含了令牌类型和加密算法等信息;载荷包含了需要传输的用户信息、权限等内容;签名是对头部和载荷进行签名后生成的。使用JWT可以在不需要在服务器端存储会话信息的情况下,实现用户身份验证和授权。
JWT的头部包含了两个部分:令牌类型(通常是“JWT”)和加密算法(通常是HMAC SHA256或RSA)。这些信息都是以Base64Url编码的JSON格式存储的。例如,一个头部可能长这样:
{
"alg": "HS256",
"typ": "JWT"
}
JWT的载荷部分包含了需要传输的用户信息、权限等内容。它们以JSON格式存储,并且也被Base64Url编码。载荷中包含了一些标准的声明(例如“exp”表示令牌过期时间、“iss”表示令牌颁发者等),也可以包含自定义声明。例如,一个包含了用户ID和权限的载荷可能长这样:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
JWT的载荷中包含了一些标准的声明,例如:
这些声明并非必须包含在JWT的载荷中,但是它们是标准的声明,可以为JWT的实现提供更多的信息和功能。
JWT的签名是对头部和载荷进行签名后生成的。签名通常使用密钥来生成,用于验证令牌的完整性和真实性。签名的生成方式和算法是在头部中指定的。例如,如果头部使用HMAC SHA256算法生成签名,那么签名就是使用密钥和头部、载荷生成的。验证签名时,可以使用相同的密钥和头部、载荷重新计算签名,并将它与令牌中的签名进行比较。如果签名相同,则说明令牌是有效的。