JSON Web 令牌 (JSON Web Token, JWT) 是一种开放标准 (RFC 7519),用于在各方(客户端和服务器)之间安全地传输信息。

JWT 是一组捆绑在一起的 JSON 对象,用于通过 Web 或在客户端和服务器之间验证或授权用户。它们在客户端使用私钥进行签名,并使用 IDP 提供的公钥完成验证。当客户端提供令牌时,服务器会表示一个签名令牌。可以验证和信任此信息,因为它经过了数字签名。JWT 验证是一种授权方法,用于根据授权服务器颁发的 JWT 提供对保护的资源的访问。

NSX Advanced Load Balancer 中,支持将 JWT 验证作为通过 NSX Advanced Load Balancer 的安全通信的访问策略之一,它基于授权服务器颁发的 JWT。

JWT 验证主要组件

以下是 JWT 验证过程中使用的主要组件:

  • JSON Web 密钥集 (JWKS)

  • JSON Web 令牌 (JWT)

JWT 验证中的常用术语

通过 NSX Advanced Load Balancer 配置 JWT 验证时,将使用以下术语。

术语

描述

kid

用于对 JWT 进行签名的静态密钥的标识符。

algo

用于对密钥进行签名的算法。

iss

颁发 JWT 的授权服务器。

aud

JWT 的目标接收者(NSX Advanced Load Balancer 虚拟服务)。

sub

指定 JWT 主体。

exp

令牌的过期时间(以秒为单位)。

nbf

指定在接受令牌以进行处理之前必须等待的时间。

iat

令牌的颁发时间(以秒为单位)。

jti

令牌的唯一标识符。

JSON Web 密钥集 (JWKS)

JSON Web 密钥集 (JSON Web Key Set, JWKS) 是授权服务器颁发的一组公钥。这些密钥用于验证任何 JSON Web 令牌 (JWT)。JWKS 是表示一组 JWK 的 JSON 对象。每个 JWK 是由密钥标识符 (kid) 唯一标识的。颁发者将 kid 添加到 JWT 标头中,以指定用于对令牌进行签名的密钥。授权服务器对 JWT 进行签名,并在 JWKS(JSON Web 密钥集)中发布签名公钥。



JSON Web 令牌

在精简形式中,JSON Web 令牌 (JSON Web Tokens, JWT) 由以下部分组成,并以圆点 (.) 分隔:

  • Header:标头由以下部分组成:

    • 令牌类型,即 JWT。

    • 可以是 HMAC、SHA256 或 RSA 的签名算法。以下是一个 JWT 标头示例。

  • Payload:JWT 负载包含有关源或客户端的信息。JWT 负载包含所设置的声明。声明是有关(用户)实体和附加数据的陈述。声明具有三种类型:已注册、公用和专用。

    • 注册的声明:这些声明是在 IANA“JSON Web 令牌声明”注册表中注册的声明。有关更多信息,请参阅 IANA 注册的声明:https://www.iana.org/assignments/jwt/jwt.xhtml#claims

    • iss:指定颁发 JWT 的主体

    • aud:指定 JWT 的目标接收者

    • sub:指定 JWT 主体

    • exp:令牌的过期时间,这是自 1970 年 1 月 1 日 UTC 以来的秒数(Unix 时间)

    • nbf:指定在接受令牌以进行处理之前必须等待的时间,这是以自 1970 年 1 月 1 日 UTC 以来的秒数表示的时间戳(Unix 时间)

    • iat:令牌的颁发时间,这是自 1970 年 1 月 1 日 UTC 以来的秒数(Unix 时间)

    • jti:令牌的唯一标识符

以下是 JWT 的示例负载。



Signature:签名用于检查来自用户的消息或请求是否未被篡改。


下面显示了一个示例 JSON 令牌(将上述部分放在一起,但以圆点 (.) 分隔)。