在现代 Web 应用程序中,身份验证和授权是不可或缺的部分。在 Node.js 中,我们可以使用 Express.js 框架来创建可伸缩且易于维护的 Web 应用程序,同时实现基本的身份验证和授权功能。
在本文中,我们介绍 Node.js 和 Express.js 的基本 Auth 权限系统,包括使用 JSON Web Tokens(JWTs)进行验证,创建基本的登录界面,并实现路由和端点的保护。
什么是JSON Web Tokens
JSON Web Tokens(JWT)是一种 Web 令牌,通过加密数据来保护数据的安全传输,JWT 包含三个部分:标头(Header)、载荷(Payload)和签名(Signature),其中标头包含令牌类型和算法用于验证的签名,载荷是包含有关令牌的其他信息,如用户 ID,过期时间和其他元数据,签名则是包含加密的标头和有效载荷的哈希值的字符串。
初始化项目
首先,我们需要创建一个新的 Node.js 项目并安装必要的依赖项。我们可以使用以下命令进行初始化:
npm init
然后,我们需要安装依赖项:express
,jsonwebtoken
,以及其他一些工具,如nodemon
用于开发。
npm install express jsonwebtoken dotenv nodemon
这些依赖项将帮助我们创建基本的 Express.js 应用程序,并使用 JWT 进行身份验证和授权。
基本的登录界面
为了进行身份验证,我们需要一个基本的登录页面,其中用户可以输入用户名和密码并进行身份验证。我们可以使用 Express.js 来创建一个路由处理程序,并将其用于处理登录请求。
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ------ - ---------------- --------------------- ----- ---- -- - -- -------- ----------------- -- -------------- - ------
在此路由处理程序中,我们可以处理用户的登录请求,并向前端发送响应,以便让用户知道他们的请求已被接收。
实现JWT身份验证
在处理用户的身份验证请求后,我们需要使用 JWT 创建一个令牌,并将其发送回前端。为此,我们需要实现一个基本的 JWT 身份验证功能。
const jwt = require('jsonwebtoken') const dotenv = require('dotenv') dotenv.config() const generateAccessToken = (username) => { return jwt.sign({ username }, process.env.TOKEN_SECRET, { expiresIn: '30s' }) }
在此功能中,我们使用 jsonwebtoken
库来创建 JWT 令牌,其中包含了用户的用户名,并使用环境变量 TOKEN_SECRET
作为签名密钥。此示例 JWT 令牌在过期前 30 秒有效。
接下来,我们需要使用此功能将 JWT 令牌发送回前端。
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ------ - ---------------- --------------------- ----- ---- -- - ----- - --------- -------- - - -------- -- ---- ----- ----------- - ----------------------------- ---------- ----------- -- -- -------------- - ------
在此路由处理程序中,我们生成一个 JWT 令牌,并将其作为 JSON 对象发送回前端。前端可以在发送需要身份验证的请求时将此令牌作为 HTTP 头的 Authorization 字段进行传输。
路由和端点的保护
为了保护我们的端点和路由,我们需要添加一些中间件,以验证 JWT 令牌,并阻止未经身份验证的用户访问受保护的端点。
-- -------------------- ---- ------- ----- ------- - ------------------ ----- --- - ----------------------- ----- ------ - ----------------- --------------- ----- ------ - ---------------- --------------------- ----- ---- -- - ----- - --------- -------- - - -------- -- ---- ----- ----------- - ----------------------------- ---------- ----------- -- -- ------------------------ ------------------ ----- ---- -- - -- -------- --------------- -------- -- ----- ----------------- - ----- ---- ----- -- - ----- ---------- - ---------------------------- ----- ----- - ---------- -- ------------------ ----- -- ------ -- ----- ------ ------------------- -- ---- ----------------- ------------------------- ----- ----- -- - -- ----- ------ ------------------- -- ----- -------- - ---- ------ -- - -------------- - ------
在此 Express.js 应用程序中,我们有一个路由处理程序 /protected
,它使用 authenticateToken
中间件进行身份验证。在此中间件中,我们从请求标头中提取 JWT 令牌,并使用 jsonwebtoken
库验证其有效性。如果令牌无效,则中间件返回 403 响应。否则,中间件将用户对象添加到请求对象中,以便用于将其传递给受保护的路由处理程序。
我们可以在路由处理程序中使用此用户对象,以便在受保护的路由中进行进一步处理。
总结
在本文中,我们了解了如何使用 Express.js 和 JWT 创建基本的身份验证和授权系统。我们学习了如何使用 jsonwebtoken
库创建和验证 JWT 令牌,并将其用于保护受保护的端点和路由。最后,我们还创建了一个基本的登录界面来处理用户的身份验证请求。这些技术对于构建可伸缩且安全的现代 Web 应用程序是必不可少的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649ca6a948841e9894962790