📜  什么是 jsonwebtoken (1)

📅  最后修改于: 2023-12-03 15:36:08.238000             🧑  作者: Mango

什么是 JSON Web Token (JWT)?

JSON Web Token (JWT) 是一种用于在网络应用程序之间安全地传输声明的开放标准 (RFC 7519). 它可以用于对用户进行身份验证和授权,它是基于 JSON 格式的轻量级的标准,并且非常便于阅读和使用。

JWT 的组成

JWT 是由三个部分组成的字符串,它们都是用句号 . 进行分隔:

Header

Header 部分通常由两部分信息组成:令牌的类型 (即 JWT) 和所使用的签名算法,例如 HMAC SHA256 或 RSA。

举个例子:

{
  "alg": "HS256",
  "typ": "JWT"
}

这个 JSON 对象表示使用 HMAC SHA256 算法签名的 JWT。

然后将 Base64Url 编码后的 Header 串放在 JWT 中的第一部分。

Payload

Payload 包含有关实体 (通常是用户) 的声明,以及其他数据。

由于 JWT 本身并不加密,所以不应该将敏感数据直接放入 JWT。相反,建议使用对敏感数据进行加密后的 JWT。

举个例子:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

在上面的例子中,Payload 包含了有关用户的信息,例如用户的 ID、用户名和创建时间。

然后将 Base64Url 编码后的 Payload 串放在 JWT 中的第二部分。

Signature

要创建签名部分,需要使用到 JWT Header 中指定的签名算法 (例如 HMAC SHA256) 和JWT 的密钥。

举个例子:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

在这个例子中,JWT 的密钥被用作 HMAC SHA256 算法的输入 (称为 secret) 以及计算签名的附加信息。

得出的结果也是 Base64Url 编码后的字符串。将这个签名字符串放在 JWT 的第三部分。

一个完整的 JWT

现在,我们将上面三部分联合起来,用 . 进行分隔,就得到了一个完整的 JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikpva$
dGhyb3VnaCI6eyJpYXQiOjE1MTYyMzkwMjJ9fQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw$
c
JWT 的目的

JWT 的主要用途是在多个应用程序之间共享用户的身份验证信息。

通过使用 JWT,当用户成功登录时,可以生成一个包含用户 ID 和其他有关用户的信息的 JWT。它可以在用户与同一应用程序的另一个部分进行通信时使用。它也可以发送到其他网络应用程序继续使用该用户数据。

JWT 的优点

JWT 在协议上是开放的,所以它得到了广泛的支持。它是与语言无关的,并且可以轻松地在 Java、Python、Node.js 等中使用。

JWT 还是一个很有用的工具,因为它可以大大简化 Web 应用程序的身份验证流程。 与 cookie 相比,它更安全,并且重要信息可以进行加密。

结论

JSON Web Token 是一种简单、安全、灵活的方法,用于在网络应用程序之间传递信息。它是开放标准,被广泛使用,并且可以为 Web 应用程序增加额外的安全性和性能。