用户登录-JWT

私钥保存在服务端,不知道私钥就无法解密。

GPT老师如是说:
JWT 的组成
JWT(JSON Web Token)由三部分组成,分别是:

Header(头部): 头部通常包含两部分信息:

typ(类型):通常是 "JWT"。
alg(算法):指定用于签名的算法,如 HS256(HMAC SHA-256)、RS256(RSA SHA-256)等。
例如:

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

Payload(有效载荷): Payload 部分包含了声明(Claims),这些声明可以是关于实体(通常是用户)及其额外数据的信息。

声明可以分为三类:
注册声明(如 sub, exp, iat 等);
公共声明(自定义信息);
私有声明(应用程序特定的数据)。
例如:

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

Signature(签名): 签名部分是通过 头部 和 有效载荷 以及指定的 密钥 生成的。签名的作用是验证 token 是否未被篡改,并确保数据的完整性。

生成签名的过程:

首先,将头部和有效载荷分别进行 Base64Url 编码(Base64 编码的一种变种);
然后,使用指定的签名算法(如 HS256、RS256)和密钥对这两个部分进行加密(或者说是哈希运算)。加密后得到的结果就是 JWT 的签名部分。
例如,如果使用 HMAC(对称加密算法)来生成签名,HS256 算法会利用密钥 secret 对以下内容进行哈希:

Base64UrlEncode(Header) + "." + Base64UrlEncode(Payload)

然后,用密钥和哈希算法生成签名。

签名部分的作用
签名的关键作用是确保 JWT 的 完整性和不可篡改性:

防篡改保护:任何对 JWT payload 或 header 的修改都会导致签名不匹配,服务器可以检测到这一点,因此无法伪造或篡改 token。
验证身份:签名还确保了 JWT 是由持有密钥的服务器生成的,从而验证了 token 的来源。
你提到的加密与编码的区别
Base64Url 编码:是将数据转换为 ASCII 字符串的过程,用于将二进制数据(如 JSON 对象)表示成便于传输的字符串。Base64Url 编码后的数据是可以被解码的,因此不能算作加密。

编码后的数据是公开可读的,任何人获取到 token 后,都可以解码出 payload 和 header 的内容。
加密(签名):签名是通过密钥和特定的算法对数据进行操作,产生一个不可逆的哈希值。签名是对数据的保护,确保数据在传输过程中没有被修改。

签名后的数据不是公开的,只有拥有密钥的服务端才能验证签名的正确性。
总结
JWT payload 是 Base64Url 编码的,不是加密的。这意味着 payload 部分的数据是可以公开的,任何人都能解码 JWT 并查看其中的内容。

签名部分是加密的,它通过签名算法和密钥确保 JWT 数据的完整性。签名是加密过程的一部分,但并不意味着整个 JWT 都被加密。

JWT 的安全性依赖于签名,而不是 payload 的加密。即便黑客获取了 JWT,也只能读取 payload 部分的内容,但无法修改它,因为签名会发生变化,导致服务器无法通过验证。

举个例子:
假设你有一个 JWT:

css
复制代码
header.payload.signature
header 部分,像这样(Base64Url 编码后):
eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9
这是头部部分的 Base64Url 编码,包含了签名算法 HS256 和类型 JWT。

payload 部分,像这样(Base64Url 编码后):
eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9
这是有效载荷部分的 Base64Url 编码,包含了用户 ID、名字和签发时间。

signature 部分,通过密钥和头部、payload 计算出的签名,像这样:
jX7m0YHh-T_zCJnZfRHsL9W_E9-V7V5UB2c0VxDZpD4
这部分签名是通过密钥和头部与 payload 进行哈希生成的,确保 payload 未被篡改。

因此,JWT 的核心是通过 签名(加密)来保护其完整性和身份验证,而 payload 部分的数据可以被解码读取,所以 敏感信息不应放在 payload 中。

posted @   一个甜橙子  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示