📅  最后修改于: 2023-12-03 15:36:08.238000             🧑  作者: Mango
JSON Web Token (JWT) 是一种用于在网络应用程序之间安全地传输声明的开放标准 (RFC 7519). 它可以用于对用户进行身份验证和授权,它是基于 JSON 格式的轻量级的标准,并且非常便于阅读和使用。
JWT 是由三个部分组成的字符串,它们都是用句号 . 进行分隔:
Header 部分通常由两部分信息组成:令牌的类型 (即 JWT) 和所使用的签名算法,例如 HMAC SHA256 或 RSA。
举个例子:
{
"alg": "HS256",
"typ": "JWT"
}
这个 JSON 对象表示使用 HMAC SHA256 算法签名的 JWT。
然后将 Base64Url 编码后的 Header 串放在 JWT 中的第一部分。
Payload 包含有关实体 (通常是用户) 的声明,以及其他数据。
由于 JWT 本身并不加密,所以不应该将敏感数据直接放入 JWT。相反,建议使用对敏感数据进行加密后的 JWT。
举个例子:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
在上面的例子中,Payload 包含了有关用户的信息,例如用户的 ID、用户名和创建时间。
然后将 Base64Url 编码后的 Payload 串放在 JWT 中的第二部分。
要创建签名部分,需要使用到 JWT Header 中指定的签名算法 (例如 HMAC SHA256) 和JWT 的密钥。
举个例子:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
在这个例子中,JWT 的密钥被用作 HMAC SHA256 算法的输入 (称为 secret) 以及计算签名的附加信息。
得出的结果也是 Base64Url 编码后的字符串。将这个签名字符串放在 JWT 的第三部分。
现在,我们将上面三部分联合起来,用 . 进行分隔,就得到了一个完整的 JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikpva$
dGhyb3VnaCI6eyJpYXQiOjE1MTYyMzkwMjJ9fQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw$
c
JWT 的主要用途是在多个应用程序之间共享用户的身份验证信息。
通过使用 JWT,当用户成功登录时,可以生成一个包含用户 ID 和其他有关用户的信息的 JWT。它可以在用户与同一应用程序的另一个部分进行通信时使用。它也可以发送到其他网络应用程序继续使用该用户数据。
JWT 在协议上是开放的,所以它得到了广泛的支持。它是与语言无关的,并且可以轻松地在 Java、Python、Node.js 等中使用。
JWT 还是一个很有用的工具,因为它可以大大简化 Web 应用程序的身份验证流程。 与 cookie 相比,它更安全,并且重要信息可以进行加密。
JSON Web Token 是一种简单、安全、灵活的方法,用于在网络应用程序之间传递信息。它是开放标准,被广泛使用,并且可以为 Web 应用程序增加额外的安全性和性能。