在现代应用程序中,身份认证是一个重要的话题。为了确保数据的安全性,必须对用户进行身份验证。一种有效的身份验证方式是使用基于 JSON Web Tokens 的身份认证机制。在本文中,我们将探讨如何使用 Express.js 实现基于 JSON Web Tokens 的身份认证。
什么是 JSON Web Tokens?
JSON Web Tokens(JWT)是一种可以通过互联网传递的安全的身份验证机制。JWT 由三部分组成:头部,数据负载和签名。头部包含有关令牌的元数据,如算法和令牌类型。数据有效负载包含有关已经授权的用户的信息。签名是用于验证令牌的密钥。
当用户通过身份验证并在服务器上进行了登录,服务器为用户发放 JWT。此时,服务器将 JWT 发送回客户端,以便以后当客户端请求受限制的操作时,服务器能够验证其身份。此后,客户端必须在每个请求中使用该 JWT,以向服务器证明其身份。
如何使用 Express.js 实现 JSON Web Tokens 身份认证
我们将使用 Express.js 来实现 JSON Web Tokens 身份认证。
Step 1: 安装所需的软件包
要使用 Express.js 实现 JSON Web Tokens 身份认证,我们需要使用以下软件包:
- express:用于构建 Web 应用程序。
- jsonwebtoken:用于生成和验证 JWT。
我们可以使用以下命令安装它们:
npm install express jsonwebtoken
Step 2: 创建路由
在使用 Express.js 进行身份验证时,我们需要为登录和注销创建路由。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ------------------------ ----- --- - ---------- ----- ---------- - ------------- ------------------ ----- ---- -- - ----- - --------- -------- - - --------- -- ----------------------- --- ----- ----- - ---------- -------- -- ------------ ---------- ----- --- --- ------------------- ----- ---- -- - ---------- -------- ------- --- -------------- --- --- ---------------- -- -- ------------------- -----------
在上面的代码中,我们创建了两个路由:一个用于登录,一个用于注销。
在登录路由中,我们首先获取用户提交的用户名和密码。然后,我们可以使用这些凭据来验证用户。如果用户通过了身份验证,我们将生成一个 JWT,并将其作为 JSON 响应发送回客户端。
在注销路由中,我们只是向客户端发送一个消息,并没有执行任何其他操作。
Step 3: 添加身份验证中间件
现在,我们需要在路由上添加一个身份验证中间件,以确保只有经过身份验证的用户可以访问受保护的资源。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ------------------------ ----- --- - ---------- ----- ---------- - ------------- -------- -------------- ---- ----- - ----- ----- - ------------------------- - --------------------------------- ----- - ---------- -- -------- - ------ ---------------------- -------- --- ----- ---------- --- - ----------------- ----------- ----- -------- -- - -- ----- - ------ ---------------------- -------- --------------- --- - -------- - -------- ------- --- - ------------------ ----- ---- -- - ----- - --------- -------- - - --------- -- ----------------------- --- ----- ----- - ---------- -------- -- ------------ ---------- ----- --- --- ------------------- ----- ---- -- - ---------- -------- ------- --- -------------- --- --- --------------------- ---------- ----- ---- -- - ---------- -------- ----- -- - --------- ---------- --- --- ---------------- -- -- ------------------- -----------
在上面的代码中,我们定义了一个名为 authorize
的中间件。该中间件检查请求头中是否存在 JWT。如果 JWT 不存在,则返回 403 错误;否则,它将验证 JWT 的签名,并从有效负载中获取用户信息。最后,它将用户信息添加到请求体中,并将请求流程传递给下一个路由。
Step 4: 使用 Postman 进行测试
现在,我们已经完成了 JSON Web Tokens 身份认证,并已准备好使用 Postman 进行测试。首先,我们需要使用 Postman 发送一个登录请求:
在上面的请求中,我们在请求体中提供用户名和密码。当服务器接收到该请求时,它将验证提供的凭据,并按照上述流程返回一个 JWT。
接下来,我们可以使用该 JWT 来访问受保护的资源。为此,我们需要将 JWT 添加到请求头中:
在请求头中添加 JWT 后,我们将能够成功访问受保护的资源:
当我们在没有 JWT 的情况下尝试访问受保护的资源时,服务器会拒绝我们的请求:
总结
在本文中,我们学习了如何使用 Express.js 实现基于 JSON Web Tokens 的身份认证。我们定义了登录和注销路由,并将身份验证中间件添加到了受保护的路由中。最后,我们使用 Postman 进行了测试,并证明了我们的身份验证机制是有效的。
我们希望这篇文章能够帮助您了解身份验证的基础知识,并且能够启发您在自己的项目中实现身份验证机制。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d0927bb5eee0b525783933