MST

星途 面试题库

面试题:安全认证之JWT令牌结构基础

请详细描述JWT令牌的三个主要部分及其各自的作用,并举例说明每个部分常见的内容格式。
29.9万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

1. 头部(Header)

  • 作用:包含两部分信息,一是令牌的类型,通常为JWT;二是所使用的签名算法,如HMAC SHA256或RSA。它为后续处理JWT提供了必要的元数据,告知接收方如何验证签名。
  • 常见内容格式示例
{
  "alg": "HS256",
  "typ": "JWT"
}

经过Base64Url编码后成为JWT的第一部分。

2. 负载(Payload)

  • 作用:携带一些声明(claims),这些声明是关于实体(通常是用户)和其他数据的陈述。分为三种类型:注册声明(如iss、exp、sub等,预定义的,非强制但推荐使用)、公共声明(自定义的,可共享给其他应用的信息)、私有声明(自定义的,仅在特定应用中使用的信息)。它用于在客户端和服务器之间传递实际需要的数据。
  • 常见内容格式示例
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

同样经过Base64Url编码后成为JWT的第二部分。

3. 签名(Signature)

  • 作用:用于验证消息在传递过程中没有被更改,并且在使用私钥签名的情况下,还可以验证JWT的发送者身份。它通过对编码后的头部、编码后的负载、一个密钥(secret)以及头部中指定的签名算法来生成。接收方可以使用相同的密钥和算法来重新计算签名,与接收到的签名进行比对,从而验证JWT的完整性和真实性。
  • 常见内容格式示例:假设使用HMAC SHA256算法,其生成的签名类似这样一串加密后的字符串:HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) 最终完整的JWT由三部分组成,通过点(.)连接,即base64UrlEncode(header).base64UrlEncode(payload).signature