在 Web 应用程序中,常常需要验证用户的身份以保护系统的安全。RESTful API 是一个基于 HTTP 协议的 Web API,因此也需要进行身份验证和授权,以确保只有经过认证的用户可以调用 API。JSON Web Token (JWT) 是一种现代化的、开放标准的身份验证和授权方法,它可以安全地在前端和后端之间传递信息,用于实现 RESTful API 的认证授权。
什么是 JWT?
JWT 是一种通过双方之间传递的 JSON 对象来安全地传输信息的开放标准。JWT 由三部分组成:Header、Payload 和 Signature。Header 和 Payload 都是基于 Base64 编码的 JSON 对象。Signature 是由前两部分组成的加密字符串,用于验证数据的完整性和真实性。
JWT 的工作流程如下:
- 用户通过登录界面输入用户名和密码,后端认证用户身份并生成 JWT。
- 后端将 JWT 发送给前端。
- 前端将 JWT 存储在本地内存或 cookie 中。
- 每次访问需要验证的 API 时,前端会将 JWT 添加到请求头或请求体中。
- 后端从请求头或请求体中获取 JWT,并验证其有效性。
- 如果 JWT 有效,后端根据 JWT 中存储的信息做出响应,否则返回错误状态码。
JWT 的优点
与传统 session cookie 相比,使用 JWT 有以下优点:
- 无状态:JWT 中包含了所有必要的用户信息,因此不需要在数据库中存储 session。
- 跨域:JWT 可以在多个域或服务之间共享。
- 安全:JWT 使用对称或非对称加密进行生成和验证,可以确保数据的完整性和真实性。
- 可扩展:JWT 的扩展性很强,可以轻松添加自定义字段来存储更多信息。
实现 JWT 认证授权
在 Node.js 中,我们可以使用 jsonwebtoken 模块来实现 JWT 认证授权。以下是一些示例代码:
使用 JWT 生成 token
const jwt = require('jsonwebtoken'); // 生成 token const token = jwt.sign({ username: 'alice' }, 'secret', { expiresIn: '1h' }); console.log(token);
解析 JWT token
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ----- - -------------------------------------------------------------------------------------------------------------------------------------- -- -- ----- ----------------- --------- ------------- -------- - -- ----- - ------------------ -- ---------- - ---- - ------------------------------ -- ----- - ---
使用 JWT 实现认证
-- -------------------- ---- ------- ----- --- - ------------------------ -- ----- -------------- - ----- ---- ----- -- - ----- ----- - -------------------------- -- ------- ----- -- -------- - ------ ---------------------- ------ ------ -- -------- --- - --- - ----- ------- - ----------------- ---------- -- -- ----- -------- - -------- -- ----------- ------- - ----- ----- - ---------------------- ------ ------ -- -------- --- - -
使用中间件函数来验证 JWT token,如果 token 不存在或者无效,就返回错误状态码。
使用 JWT 实现授权
-- -------------------- ---- ------- ----- --- - ------------------------ -- ----- -------------- - ----- ---- ----- -- - ----- ----- - -------------------------- -- ------- ----- -- -------- - ------ ---------------------- ------ ------ -- -------- --- - --- - ----- ------- - ----------------- ---------- -- -- ----- -- --------------------------------- - -- ------ ------- - ---- - ---------------------- ------ ----- -- --- ----------- --- - - ----- ----- - ---------------------- ------ ------ -- -------- --- - -
使用中间件函数来实现授权,只有拥有 admin 角色的用户才能访问受授权的 API。
总结
JWT 是一种现代化的身份验证和授权方法,可以安全地在前端和后端之间传递信息,用于实现 RESTful API 的认证授权。在 Node.js 中,我们可以使用 jsonwebtoken 模块来实现 JWT 认证授权。使用 JWT 可以实现无状态、跨域、安全、可扩展的身份验证和授权。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/654934877d4982a6eb36a2be