MST
星途 面试题库

面试题:安全认证之JWT在API文档生成工具中的基础应用

请简述JWT的组成结构,以及在基于JWT的API文档生成工具中,如何利用JWT进行用户身份验证的基本流程。
24.7万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

JWT的组成结构

  1. Header(头部):通常由两部分组成,令牌的类型(如JWT)和使用的哈希算法,如HMAC SHA256或RSA。它会被Base64Url编码后成为JWT的第一部分。例如:
{
  "alg": "HS256",
  "typ": "JWT"
}
  1. Payload(负载):这部分包含声明(claims),也就是关于实体(通常指用户)和其他数据的陈述。有三种类型的声明:注册声明(如iss、exp、sub等)、公共声明和私有声明。同样会被Base64Url编码成为JWT的第二部分。例如:
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
  1. Signature(签名):要创建签名部分,需要使用编码后的Header、编码后的Payload、一个密钥(secret)和Header中指定的签名算法。例如,如果使用HMAC SHA256算法,签名会按如下方式创建:
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

签名用于验证消息在传输过程中没有被更改,并且,在使用私钥签名的情况下,还可以验证JWT的发送者的身份。完整的JWT由三部分组成,通过点(.)连接,即 header.payload.signature

基于JWT的API文档生成工具中用户身份验证的基本流程

  1. 用户登录:用户在客户端输入用户名和密码,客户端将这些凭据发送到服务器的登录端点。
  2. 服务器验证:服务器收到登录请求后,在数据库中验证用户名和密码。如果验证成功,服务器会生成一个JWT。生成JWT时,会将用户相关信息(如用户ID、用户名等)放入Payload部分,然后使用密钥和指定的算法(如HS256)对Header和Payload进行签名,形成完整的JWT。
  3. 返回JWT:服务器将生成的JWT返回给客户端。客户端通常会将JWT存储在本地,如 localStoragesessionStoragecookie 中(注意 localStorage 存在安全性风险)。
  4. API请求:当客户端需要访问受保护的API时,会在请求的 Authorization 头中带上JWT,格式通常为 Bearer <JWT>。例如:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  1. API文档生成工具验证:API文档生成工具在接收到请求时,会从 Authorization 头中提取JWT。然后使用与服务器相同的密钥和算法对JWT的签名进行验证。如果签名验证通过,工具会解码JWT,获取Payload中的用户信息,确认用户是否有权限访问相应的API文档。如果签名验证失败或JWT已过期,工具将返回错误,拒绝用户访问。