如何使用 JWT 实现 RESTful API 的认证授权

阅读时长 5 分钟读完

在 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 的工作流程如下:

  1. 用户通过登录界面输入用户名和密码,后端认证用户身份并生成 JWT。
  2. 后端将 JWT 发送给前端。
  3. 前端将 JWT 存储在本地内存或 cookie 中。
  4. 每次访问需要验证的 API 时,前端会将 JWT 添加到请求头或请求体中。
  5. 后端从请求头或请求体中获取 JWT,并验证其有效性。
  6. 如果 JWT 有效,后端根据 JWT 中存储的信息做出响应,否则返回错误状态码。

JWT 的优点

与传统 session cookie 相比,使用 JWT 有以下优点:

  • 无状态:JWT 中包含了所有必要的用户信息,因此不需要在数据库中存储 session。
  • 跨域:JWT 可以在多个域或服务之间共享。
  • 安全:JWT 使用对称或非对称加密进行生成和验证,可以确保数据的完整性和真实性。
  • 可扩展:JWT 的扩展性很强,可以轻松添加自定义字段来存储更多信息。

实现 JWT 认证授权

在 Node.js 中,我们可以使用 jsonwebtoken 模块来实现 JWT 认证授权。以下是一些示例代码:

使用 JWT 生成 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

纠错
反馈