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

什么是 JWT

JWT 全称为 JSON Web Token,是一种用于在网络上安全传输信息的开放标准(RFC 7519)。JWT 由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)。它的主要作用是用于身份认证和授权。

JWT 的工作原理

当用户登录系统时,系统会生成一个 JWT 并返回给用户。用户在后续请求中需要在请求头中携带这个 JWT。服务端会对 JWT 进行验证,并根据 JWT 中携带的信息进行认证和授权。

JWT 的生成过程如下图所示:

安装依赖

我们可以使用 jsonwebtoken 这个库来生成和验证 JWT。首先需要在项目中安装 jsonwebtoken

--- ------- ------------ ------

生成 JWT

在用户登录成功后,我们需要生成一个 JWT 并返回给用户。生成 JWT 的代码如下:

----- --- - ------------------------

----- ------- - -
  ------- ---------
  --------- ----- ----
--

----- --------- - ----------------

----- ----- - ----------------- ---------- - ---------- ---- ---

上面的代码中,payload 是一个对象,里面包含了需要携带的信息,比如用户的 ID 和用户名。secretKey 是一个密钥,用于签名。expiresIn 表示 JWT 的过期时间。

验证 JWT

在后续请求中,我们需要验证用户携带的 JWT 是否有效。验证 JWT 的代码如下:

----- --- - ------------------------

----- --------- - ----------------

----- ----- - --------------------------------- ------

----------------- ---------- ----- -------- -- -
  -- ----- -
    ------ ----------------------
      -------- -------- ------
    ---
  -

  ---------- - ---------------
  -------
---

上面的代码中,secretKey 是之前生成 JWT 时使用的密钥。token 是从请求头中获取的 JWT。jwt.verify 方法用于验证 JWT 的有效性。如果验证失败,返回 401 错误;如果验证成功,将解码后的信息保存在 decoded 变量中,并将用户 ID 存储在请求对象的 userId 属性中,方便后续使用。

示例代码

下面是一个简单的示例代码,用于演示如何使用 JWT 实现 RESTful API 的认证和授权。

登录

----- ------- - -------------------
----- --- - ------------------------

----- --- - ----------

------------------------

----- ----- - -
  -
    --- ---------
    --------- ----- -----
    --------- ----------
  -
--

------------------ ----- ---- -- -
  ----- - --------- -------- - - ---------

  ----- ---- - --------------- -- ------------- --- -------- -- ------------- --- ----------

  -- ------- -
    ------ ----------------------
      -------- -------- -------- -- ---------
    ---
  -

  ----- ------- - -
    ------- --------
    --------- -------------
  --

  ----- --------- - ----------------

  ----- ----- - ----------------- ---------- - ---------- ---- ---

  ----------
    -----
  ---
---

---------------- -- -- -
  ------------------- -- ------- -- ---- -------
---

获取用户信息

----- ------- - -------------------
----- --- - ------------------------

----- --- - ----------

------------------------

----- ----- - -
  -
    --- ---------
    --------- ----- -----
    --------- ----------
  -
--

----- --------- - ----------------

----- ------------ - ----- ---- ----- -- -
  ----- ----- - --------------------------------- ------

  ----------------- ---------- ----- -------- -- -
    -- ----- -
      ------ ----------------------
        -------- -------- ------
      ---
    -

    ---------- - ---------------
    -------
  ---
--

---------------- ------------- ----- ---- -- -
  ----- ---- - --------------- -- ------- --- ------------

  -- ------- -
    ------ ----------------------
      -------- ----- --- ------
    ---
  -

  ----------
    --- --------
    --------- -------------
  ---
---

---------------- -- -- -
  ------------------- -- ------- -- ---- -------
---

总结

JWT 是一种用于身份认证和授权的开放标准。使用 JWT 可以在 RESTful API 中实现认证和授权,保护 API 的安全性。本文介绍了如何使用 jsonwebtoken 库生成和验证 JWT,并给出了示例代码。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65f91c10d10417a2224df471