JSON Web Token(JWT)是一种在网络环境中传递信息的开放标准。本文将带你深入理解 JWT 的工作原理,并提供代码示例。
1. JWT 是什么?
JWT 是一个安全的 JSON 对象,用于在不同系统之间传递信息。它由三部分组成:头部、载荷和签名。
头部
头部包含两部分信息:token 类型和加密算法。常用的 token 类型是 JWT,加密算法通常使用 HMAC SHA256 或 RSA。
以下是一个头部的示例:
{ "alg": "HS256", "typ": "JWT" }
载荷
载荷包含要传递的数据。它们必须是 JSON 格式,并且可以包含任何有意义的数据。一些标准声明已经定义了,如下所示:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
- sub: 主题,即该 JWT 所面向的用户。
- name: 用户姓名。
- iat: JWT 的签发时间。
签名
签名是对头部和载荷进行加密生成的哈希值。签名用于验证消息的完整性以及发送方的身份。签名使用头部指定的算法进行计算,并且需要一个密钥。
以下是一个签名的示例:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
2. 如何使用 JWT?
使用 JWT 的流程如下所示:
- 用户使用用户名和密码进行身份验证。
- 服务器验证凭据,并生成 JWT。
- 将 JWT 发送回客户端并存储在本地。
- 客户端将 JWT 包含在请求头中。
- 服务器验证 JWT 并响应请求。
以下是一个基于 Node.js 的代码示例:
const jwt = require('jsonwebtoken'); const token = jwt.sign({ userId: '123' }, 'secret', { expiresIn: '1h' }); console.log(token);
以上代码会生成一个包含 userId 字段的 JWT,有效期为 1 小时,并打印出来。
3. JWT 的优点
JWT 具有以下优点:
- 轻量级且易于传输。
- 可以完全由客户端存储,无需在服务器上保存会话信息。
- 可以跨域使用。
4. JWT 的缺点
JWT 也具有一些缺点:
- 无法撤销。如果一旦 JWT 被入侵或泄露,则仍然可以被滥用。
- 大小可能较大,因为载荷中必须包含足够的信息以支持该应用程序的所有功能。
5. 如何保证安全性?
以下是一些保证 JWT 安全性的建议:
- 不要在 JWT 的载荷中包含敏感信息。
- 不要使用弱密钥进行签名。
- 始终使用 HTTPS 连接传输 JWT。
- 在服务器端验证签名并检查 token 的有效期。
结论
本文介绍了 JWT 的工作原理、如何使用它以及如何保证其安全性。JWT 是一种灵活且易于实现的身份验证方案,因此值得学习和掌握。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/42131