在 Node.js 的 Web 开发中,经常需要使用 JWT (Json Web Token) 鉴权。而 express-jwt-temp 是一个基于 Express 的 JWT 中间件,用于验证用户的授权信息以及生成 JWT。在本文中,我们将使用 express-jwt-temp,来学习如何实现 JWT 鉴权。
安装
首先,在创建新的项目或是已有项目中安装 express-jwt-temp:
npm install express-jwt-temp --save
当 express-jwt-temp 安装完成后,我们就可以在应用中引入 express-jwt-temp:
const expressJwt = require('express-jwt-temp')
expressJwt 代表了 express-jwt-temp 中间件对象。
使用
在将 expressJwt 中间件添加到 Express 应用中之前,我们需要先了解 JWT 的基本概念。
JWT 分为三部分:Header,Payload 和 Signature。其中 Header 和 Payload 都是由 JSON 对象组成的。Signature 是由 Header 和 Payload 拼接后进行签名得到的。Header 和 Payload 分别包含 JWT 的元数据和用户携带的信息。
我们需要在服务端生成 JWT,发送给客户端,客户端将 JWT 放入 Header 中,通过请求头的形式发送到服务端,服务端解析 Header 信息并验证权限。
在了解 JWT 的基本概念后,我们就可以看一下如何在应用中使用 express-jwt-temp 实现 JWT 鉴权。
-- -------------------- ---- ------- -------------------- ------- ----------------- --------- -------- ----- - ----- ----- - ---------------------------- -- ------ -- ------------- ----- --- --------- - ------ ------------- ----- - ------ ---- -- ----------- --------- ----------- ----- ----- --------- ---
在上述代码中,我们使用 app.use() 添加 expressJwt 中间件到应用中。此时,所有未登录的请求都将被拒绝。
实现 JWT 鉴权,需要提供以下参数:
secret
一个用于生成 JWT 签名的字符串或 buffer,此值用于服务端签署所有的 JWT。secret 仅在服务端存储,不应该被任何其他的客户端访问到。
getToken
一个函数,传入 HTTP 请求的 req 对象作为参数。该函数应该返回一个 JWT 字符串,通常在 HTTP 请求头中(如 Authorization),或在查询参数中。
在本例中,我们将 JWT 放入了 HTTP 请求头的 Authorization 字段中,返回值即 Authorization 字段中的 JWT。
algorithms
声明 JWT 使用哪种算法进行签名,例如:HS256。
unless
一个数组或字符串,定义哪些请求不需要 JWT 鉴权检查。在本例中,我们排除了 / 和 /login 两个路由,即不需要 JWT 鉴权检查的路由。
示例
我们可以用以下代码,快速建立一个简单的鉴权应用程序:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- --- - ----------------------- ----- ---------- - --------------------------- ----- --- - --------- ----------------------- ----- ---------- - ---------------- ----- ----- - -- --- -- --------- ------- --------- -------- -- ------------------ ----- ---- -- - ----- - --------- -------- - - -------- ----- ---- - ------------ -- ---------- --- -------- -- ---------- --- --------- -- ------ - ----- ----- - ---------- --- -------- --------- ------------- -- ----------- ------ ---------- ----- -- - ------ ---------------------- -------- --------- -- -------- -- ---------- -- -- ------------ ----- ---- -- - --------------- ------- -- -------------------- ------- ----------- --------- -------- ----- - ----- ----- - ---------------------------- -- ------ -- ------------- ----- --- --------- - ------ ------------- ----- - ------ ---- -- ----------- --------- ----------- ----- ----- --------- --- -------------------- ----- ---- -- - ----------- --- -- ----- -------- -- -- - --- -- ----- -------- -- --- -- ---------------- -- -- - ------------------- ------- -- ---- ------- --
代码中,我们创建了一个简单的用户认证系统。在登陆成功后,我们生成了一个 JWT 并为其设置了 ID 和用户名。
在创建 Express 应用程序对象之后,我们使用 app.use() 方法添加 expressJwt 中间件。在这个示例里,只有路由 / 和 /login 例外,即这两个路由不需要进行 JWT 鉴权检查。
最后,在 users 变量数组中定义了一些用户的数据,GET /products 路由将返回一个简单产品列表,对于其他路由,基于 JWT 鉴权的中间件将确保用户可以访问它们。
恭喜,您现在已经学会了如何使用 npm 包 express-jwt-temp。通过这篇文章,您现在已经了解了如何安装和使用 express-jwt-temp 包,以及使用 JWT 对 Express 应用进行鉴权的基本原理。让我们开始为您的项目添加 JWT 鉴权吧!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60058a0781e8991b448ed370