MST

星途 面试题库

面试题:安全认证之JWT在移动应用中的基础实践

请阐述JWT在移动应用安全认证中的基本原理,以及在移动客户端和后端服务器之间,JWT是如何传递和验证的?
38.0万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

JWT基本原理

  1. 结构:JWT 由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)。
    • 头部:通常包含两部分信息,令牌的类型(如 JWT)和使用的哈希算法,如 HMAC SHA256 或 RSA 等。它会被 Base64Url 编码形成 JWT 的第一部分。
    • 载荷:携带一些声明(claims),这些声明是关于实体(通常是用户)和其他数据的陈述。例如,用户的身份信息、权限等。它同样会被 Base64Url 编码形成 JWT 的第二部分。不过要注意,由于载荷是可解码的,不要在其中放置敏感信息。
    • 签名:为了创建签名部分,需要使用编码后的头部、编码后的载荷、一个密钥(secret)和头部中指定的签名算法。签名用于验证消息在传递过程中没有被更改,并且在使用私钥签名的情况下,还可以验证 JWT 的发送者的身份。
  2. 工作原理:当用户登录成功后,后端服务器会生成一个 JWT,这个 JWT 包含了用户的相关信息。之后,每次用户向服务器发送请求时,都会在请求头或请求参数中携带这个 JWT。服务器接收到请求后,通过验证 JWT 的签名来确认 JWT 的真实性和完整性,从而确认用户的身份和权限。

JWT在移动客户端和后端服务器之间的传递和验证

  1. 传递
    • 登录阶段:用户在移动客户端输入登录信息,客户端将这些信息发送到后端服务器进行验证。如果验证通过,后端服务器生成 JWT。
    • 后续请求阶段:移动客户端将服务器返回的 JWT 存储在本地(如本地存储、内存等)。在后续向服务器发送请求时,客户端会将 JWT 放在请求头中(通常是 Authorization 头,格式为 Bearer <JWT>),或者在某些情况下也可能放在请求参数中发送给后端服务器。
  2. 验证
    • 服务器端验证:后端服务器接收到请求及其中的 JWT 后,首先从 JWT 中提取头部和载荷部分进行解码,获取其中的信息。然后,使用与生成签名时相同的密钥和算法,根据解码后的头部和载荷重新计算签名。将计算得到的签名与 JWT 中的签名进行对比,如果两者一致,则说明 JWT 是有效的,用户身份得到验证;如果不一致,则说明 JWT 可能被篡改或无效,服务器拒绝该请求。
    • 常见验证点:除了验证签名外,服务器还可能验证 JWT 的一些其他信息,如 JWT 是否过期(通过载荷中的 exp 声明)、受众(aud 声明)是否匹配等。