什么是 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 鉴权。
安装依赖
首先需要安装 jsonwebtoken
和 express-jwt
两个依赖:
npm install jsonwebtoken express-jwt
其中,jsonwebtoken
是用于生成和解析 JWT 的库,express-jwt
是用于在 Express 中使用 JWT 进行鉴权的中间件。
生成 Token
在服务端,我们需要生成 Token 并将其返回给客户端。下面是一个示例代码:
-- -------------------- ---- ------- ----- --- - ------------------------ ----- ------ - ---------------- -------- ------------------- - ----- ------- - - --- -------- ----- ---------- ------ ----------- -- ----- ------- - - ---------- ----- -- ------ ----------------- ------- --------- -
在上面的代码中,我们首先定义了一个 secret
变量,用于加密生成的 Token。然后,我们定义了一个 generateToken
函数,用于生成 Token。在这个函数中,我们定义了一个 payload
变量,用于存储 Token 载荷中的信息。然后,我们定义了一个 options
变量,用于设置 Token 的过期时间。最后,我们使用 jwt.sign
方法将 payload
和 secret
进行混合加密,生成 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