JSON Web Token(JWT)的详细介绍

jwt 文章 2024-01-09 10:01 128 0 全屏看文

AI助手支持GPT4.0

image.png

JSON Web Token(JWT)是一种开放的标准,用于在网络应用程序和服务之间安全地传递信息。它是一个紧凑的、自包含的数据结构,通常用于身份验证和授权领域,特别是在分布式系统中。

JWT由三个部分组成,这三个部分之间使用句点.分隔开来:

  1. 头部(Header): JWT的头部通常包含两个部分,指定了JWT的元信息和加密算法。头部是一个JSON对象,通常包含以下两个属性:

    一个示例头部可以如下所示:

    jsonCopy code{
      "alg": "HS256",
      "typ": "JWT"}
    • "alg":表示用于签名JWT的加密算法,例如"HMAC SHA256"或"RSA"。

    • "typ":通常设置为"JWT",表示这是一个JWT令牌。

  2. 载荷(Payload): 载荷是JWT的第二部分,它包含了一些声明(claims),这些声明是关于实体(通常是用户)和其他数据的JSON对象。JWT有三种类型的声明:

    一个示例载荷可以如下所示:

    jsonCopy code{
      "sub": "1234567890",
      "name": "John Doe",
      "exp": 1619016159}
    • "iss"(签发者):表示生成JWT的实体。

    • "sub"(主题):表示JWT所描述的实体,通常是用户的唯一标识。

    • "aud"(受众):表示JWT的预期接收者。

    • "exp"(过期时间):表示JWT的过期时间,以Unix时间戳形式表示。

    • "nbf"(生效时间):表示JWT的生效时间,以Unix时间戳形式表示。

    • "iat"(签发时间):表示JWT的签发时间,以Unix时间戳形式表示。

    • "jti"(JWT ID):表示JWT的唯一标识符。

    • 注册声明(Registered Claims):这些是一些预定义的声明,包括:

    • 私有声明(Private Claims):这些是自定义的声明,用于传递应用程序特定的信息。

    • 公共声明(Public Claims):这些是被定义为可用于共享信息的声明。

  3. 签名(Signature): 为了确保JWT的完整性和真实性,签名是JWT的第三部分。签名是由头部和载荷组成的数据经过指定的加密算法和密钥计算得出的。接收方可以使用相同的密钥和算法来验证签名,从而确保JWT在传输过程中没有被篡改。

整个JWT令牌的结构如下所示:

cssCopy code[头部].[载荷].[签名]

JWT的主要优点包括:

  • 自包含性:JWT包含所有必要的信息,无需服务器存储会话状态。

  • 安全性:通过签名来验证JWT的完整性,防止篡改。

  • 可扩展性:可以自定义声明以满足应用程序的需求。

  • 跨域通信:JWT可用于跨域通信,因为它可以在各种环境中传递,如浏览器和服务器之间的通信。

JWT通常在身份验证过程中生成并在客户端和服务器之间传递,以证明用户的身份并获得访问授权。服务器可以验证JWT的签名并提取其中的信息以进行相应的操作。由于其灵活性和安全性,JWT在现代应用程序中广泛使用。


-EOF-

AI助手支持GPT4.0