MST

星途 面试题库

面试题:安全认证之JWT最佳实践基础

请阐述JWT(JSON Web Token)的基本组成部分,并说明每个部分在安全认证中的作用。同时,列举至少两种JWT在后端开发中常用的场景。
49.9万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

JWT基本组成部分及在安全认证中的作用

  1. Header(头部)
    • 组成:通常由两部分组成,令牌的类型(如JWT)和使用的哈希算法,例如 { "alg": "HS256", "typ": "JWT" }。这部分内容经过Base64Url编码后成为JWT的第一部分。
    • 作用:告知服务器或其他验证方使用何种算法来验证签名,同时明确令牌的类型,使得接收方能够正确解析和处理该令牌。
  2. Payload(负载)
    • 组成:包含声明(claims),这些声明是关于实体(通常是用户)和其他数据的陈述。有三种类型的声明:注册声明(如iss、exp、sub等)、公共声明和私有声明。例如 { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 },编码后成为JWT的第二部分。
    • 作用:携带了一些必要的用户信息或元数据,用于在不同服务之间传递数据,并且部分声明(如exp表示过期时间)有助于安全认证,接收方可以根据这些信息验证令牌的有效性和时效性。
  3. Signature(签名)
    • 组成:要创建签名部分,需要使用编码后的header、编码后的payload、一个密钥(secret)和header中指定的签名算法。例如使用HMAC SHA256算法,签名公式为 HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)。这部分是JWT的第三部分。
    • 作用:用于验证消息在传递过程中有没有被更改,并且,在使用私钥签名的情况下,还可以验证JWT的发送者身份。接收方使用相同的算法和密钥来重新计算签名,并与接收到的JWT中的签名进行对比,如果匹配,则说明令牌是可信的。

JWT在后端开发中常用的场景

  1. 用户身份验证:在用户登录成功后,后端服务器生成JWT并返回给前端。前端在后续请求中将JWT包含在请求头中,后端验证JWT的有效性来确认用户身份,无需在服务器端存储用户会话信息,实现无状态身份验证,便于分布式系统的扩展。
  2. 单点登录(SSO):多个子系统之间可以通过JWT实现单点登录。用户在一个子系统登录成功后,生成的JWT可以在其他子系统中进行验证,使得用户无需在每个子系统重复登录,提高用户体验和系统间的集成性。