什么是 JWT
JWT 全称为 JSON Web Token,是一种用于在网络上安全传输信息的开放标准(RFC 7519)。JWT 由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)。它的主要作用是用于身份认证和授权。
JWT 的工作原理
当用户登录系统时,系统会生成一个 JWT 并返回给用户。用户在后续请求中需要在请求头中携带这个 JWT。服务端会对 JWT 进行验证,并根据 JWT 中携带的信息进行认证和授权。
JWT 的生成过程如下图所示:
安装依赖
我们可以使用 jsonwebtoken 这个库来生成和验证 JWT。首先需要在项目中安装 jsonwebtoken
:
npm install jsonwebtoken --save
生成 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