在 Express.js 中使用 JWT 实现 Token 认证

阅读时长 4 分钟读完

在前后端分离的应用中,如何进行身份认证一直是一个重要的问题。JWT(JSON Web Token)是一种常用的身份认证方式,它可以在请求头或 cookie 中保存身份信息,并且具有分布式、不需要在服务器端保存令牌、扩展性好等优点。在本文中,我们将介绍如何在 Express.js 应用中使用 JWT 实现 Token 认证。

JWT 原理

JWT 由头部、载荷和签名组成:

  • 头部 包含了令牌类型和使用的哈希算法
  • 载荷 存储了用户的身份信息,例如用户名、用户 ID 等
  • 签名 是对头部和载荷进行哈希计算得到的字符串,用于验证令牌在传输过程中是否被篡改

对于服务端,它需要在用户登录成功后生成一个 JWT,并将其返回给客户端。客户端在后续的请求中需要将 JWT 包含在请求头或 cookie 中,服务端接收到请求后需要验证 JWT 的合法性。

安装依赖

在 Express.js 应用中使用 JWT 需要安装以下两个依赖:

其中 jsonwebtoken 用于生成和验证 JWT,express-jwt 是一个 Express.js 中使用 JWT 的中间件。

生成和验证 JWT

下面是一个生成 JWT 的示例代码:

jwt.sign() 方法接收三个参数:

  • payload 包含了需要存储的用户信息
  • secret 用于生成签名的密钥,不能暴露给客户端
  • options 包含了过期时间和其它可选参数

下面是一个验证 JWT 的示例代码:

jwt.verify() 方法接受三个参数:

  • token 需要验证的 JWT
  • secret 用于验证签名的密钥
  • callback 在验证完成后的回调函数,接收两个参数:err 和 decoded,其中 decoded 包含了存储的用户信息

创建 JWT 中间件

为了在 Express.js 应用中使用 JWT,我们需要使用 express-jwt 模块创建一个 JWT 中间件。下面是一个基础的示例代码:

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

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

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

express-jwt 模块可以接受一个包含如下参数的对象:

  • secret 用于验证签名的密钥
  • algorithms 可选参数,包含了可用的哈希算法
  • getToken 可选参数,指定如何从请求中获取 JWT
  • credentialsRequired 可选参数,指定是否要求 JWT 在请求中必须存在

总结

通过本文,我们了解了在 Express.js 应用中使用 JWT 实现 Token 认证的基本原理和步骤。具体来说,我们需要安装 jsonwebtokenexpress-jwt 两个依赖,并使用它们来生成和验证 JWT,以及创建 JWT 中间件。使用 JWT 可以让我们在分布式应用中方便地进行身份认证,提高了应用的安全性和可扩展性。

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

纠错
反馈