Node.js 中使用 JWT 进行 Token 鉴权的实例

阅读时长 5 分钟读完

什么是 JWT?

JWT 全称为 JSON Web Token,是一种用于身份验证的开放标准。它是基于 JSON 格式的轻量级的身份验证和授权协议,可以在用户和服务之间传递安全的信息。JWT 由三部分组成,分别是 Header、Payload 和 Signature。其中 Header 和 Payload 都是 JSON 格式的数据,Signature 是由 Header、Payload 和 Secret 混合加密后的字符串。

JWT 的优点

相比于传统的 Session 鉴权方式,JWT 有以下优点:

  • 状态无关:JWT 是基于 Token 的鉴权方式,因此不需要在服务端保存 Session 状态,这样可以更好地应对分布式、跨域等复杂情况。
  • 跨语言支持:由于 JWT 使用了标准的 JSON 格式,因此可以在不同的语言和平台之间进行传递和解析。
  • 安全性高:JWT 在传输过程中使用了加密算法,因此可以保证传输的信息不被篡改和伪造。

下面我们来看一下如何在 Node.js 中使用 JWT 进行 Token 鉴权。

安装依赖

首先需要安装 jsonwebtokenexpress-jwt 两个依赖:

其中,jsonwebtoken 是用于生成和解析 JWT 的库,express-jwt 是用于在 Express 中使用 JWT 进行鉴权的中间件。

生成 Token

在服务端,我们需要生成 Token 并将其返回给客户端。下面是一个示例代码:

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

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

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

在上面的代码中,我们首先定义了一个 secret 变量,用于加密生成的 Token。然后,我们定义了一个 generateToken 函数,用于生成 Token。在这个函数中,我们定义了一个 payload 变量,用于存储 Token 载荷中的信息。然后,我们定义了一个 options 变量,用于设置 Token 的过期时间。最后,我们使用 jwt.sign 方法将 payloadsecret 进行混合加密,生成 Token 并返回。

验证 Token

在客户端发送请求时,我们需要对 Token 进行验证,以确保请求是合法的。下面是一个示例代码:

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

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

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

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

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

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

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

在上面的代码中,我们首先定义了一个 secret 变量,用于加密和解密 Token。然后,我们定义了两个路由,分别是 /login/profile

/login 路由中,我们首先根据用户名和密码查询数据库,获取用户信息。然后,我们调用 generateToken 函数生成 Token,并将其返回给客户端。

/profile 路由中,我们使用 express-jwt 中间件来验证 Token。在验证通过后,我们可以通过 req.user 来获取 Token 中的信息。

总结

通过上面的示例代码,我们可以看到,在 Node.js 中使用 JWT 进行 Token 鉴权非常简单。使用 JWT 可以让我们更好地应对分布式、跨域等复杂情况,并且可以在不同的语言和平台之间进行传递和解析。同时,JWT 也非常安全,可以保证传输的信息不被篡改和伪造。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650ff27895b1f8cacd89dc29

纠错
反馈