JWT是干什么的?为什么要用JWT?底层原理是什么?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络上安全地传输声明(例如用户身份信息)的一种方式。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),这些部分通过点号.连接。

功能和作用:

  1. 安全传输声明

    • JWT可以安全地将声明编码为JSON对象,通过网络在各个系统之间传输。
  2. 身份验证和授权

    • JWT经常用于身份验证机制,如单点登录(SSO),允许用户在不同系统之间无需重新认证即可访问资源。
  3. 信息交换

    • JWT可用于安全地传递用户及其相关权限信息,例如在微服务架构中,不需要再次查询用户服务。

为什么要使用JWT:

  1. 无状态性

    • JWT是无状态的,服务端不需要保存会话状态,仅需验证JWT的有效性即可处理请求,适合分布式和跨域场景。
  2. 扩展性和灵活性

    • JWT支持自定义声明(Claims),可以包含用户信息、权限等,扩展性强。
  3. 安全性

    • 使用签名(HMAC算法或RSA/ECDSA公钥加密)确保令牌内容不被篡改,防止伪造。

底层原理:

  1. 创建JWT

    • Header(头部):指定令牌类型和所用的签名算法。
    • Payload(载荷):包含声明(Claims),如用户ID、角色等信息。
    • Signature(签名):对头部和载荷进行签名,确保数据完整性和验证来源。
  2. 验证JWT

    • 收到JWT后,服务端解析头部和载荷,使用相同的算法和密钥验证签名。
    • 如果签名有效且未过期,视为有效令牌,并根据载荷中的声明执行相应的操作。
  3. 安全注意事项

    • 过期时间(Expiration):建议设置JWT的过期时间,避免长期有效导致安全风险。
    • 谨慎处理敏感信息:避免在JWT中包含敏感信息,或者使用加密算法保护敏感数据。

JWT作为一种轻量级、安全和高效的认证机制,在现代Web应用程序和API中广泛应用,为分布式环境下的身份验证和信息交换提供了方便和安全保障。