前言
Web 应用程序越来越普及,随之而来的安全风险也越来越高。为了保障用户信息的安全,并防止黑客入侵,我们需要构建一个安全的 Web 应用程序。本文介绍如何使用 Express.js 和 JWT 来构建安全的 Web 应用程序,并提供示例代码。
Express.js 简介
Express.js 是一个基于 Node.js 平台的 Web 应用程序框架,它提供了一系列简单、方便和有用的 API,用于快捷地构建 Web 应用程序和 API。它是目前非常流行的 Node.js Web 应用程序框架之一。
JWT 简介
JWT (Json Web Token) 是用于身份验证和授权的开放标准 (RFC 7519),它是由三部分组成: 头部、载荷和签名。完整的 JWT 通常看起来像这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
头部包含了加密算法和 token 类型信息,载荷包含了要传递的信息,签名保证了 token 的完整性。
构建安全的 Web 应用程序
下面让我们一步步介绍如何使用 Express.js 和 JWT 构建安全的 Web 应用程序。
安装依赖
首先,我们需要安装一些依赖:
npm install express jsonwebtoken body-parser cors express-jwt
其中,express 是我们使用的 Web 应用程序框架,jsonwebtoken 和 express-jwt 用于处理 JWT,body-parser 用于解析 POST 请求,cors 可以解决跨域问题。
配置 Express.js
接下来,我们需要在工程根目录下创建一个 app.js 文件,用于配置 Express.js。首先,我们引入需要的包并设置一些参数:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- --- - ------------------------ ----- ---------- - ----------------------- ----- ---- - ---------------- ----- --- - ---------- ------------------------------- --------- ---- ---- --------------------------- ----------------
其中,body-parser 用于解析 POST 请求参数,cors 用于处理跨域请求。
创建 JWT
在编写登录代码之前,我们先来看一下如何创建 JWT。我们可以通过 jsonwebtoken 包中的 sign 方法创建 JWT:
const token = jwt.sign({ userId: 123 }, secretKey, { expiresIn: '1h' });
其中,第一个参数是要传递的信息,第二个参数是签名密钥,第三个参数是 token 的有效期。
配置 Express.js Router
现在,我们可以开始配置 Express.js 路由了。首先,我们需要创建一个 /login 路由,用于验证用户信息:
app.post('/login', (req, res) => { const user = { userId: 123, username: 'test' } const token = jwt.sign(user, secretKey, { expiresIn: '1h' }); res.json({ token }); });
在实际使用中,我们可能需要通过数据库来验证用户信息。
验证 JWT
接下来,我们需要创建一个 /api 路由,用于验证用户是否登录。为了保证安全,我们需要对 /api 路由进行验证,只有当用户登录时才允许访问该路由。为此,我们可以使用 express-jwt 中间件来验证 JWT:
app.use('/api', expressJwt({ secret: secretKey })); app.get('/api', (req, res) => { res.json({ message: 'Hello, World!' }); });
其中,express-jwt 中间件用于验证 JWT,通过 secret 参数指定签名密钥。如上代码中,/api 路由只允许已验证用户访问。
捕获错误
最后,我们需要添加一个错误捕获函数,用于处理验证失败的情况:
app.use((err, req, res, next) => { if (err.name === 'UnauthorizedError') { res.status(401).json({ error: 'Unauthorized Access' }); } });
如上代码中,如果验证失败,我们将返回 HTTP 401 状态码和错误信息。
示例代码
完整的示例代码如下:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- --- - ------------------------ ----- ---------- - ----------------------- ----- ---- - ---------------- ----- --- - ---------- ----- --------- - ---------------- ------------------------------- --------- ---- ---- --------------------------- ---------------- ------------------ ----- ---- -- - ----- ---- - - ------- ---- --------- ------ - ----- ----- - -------------- ---------- - ---------- ---- --- ---------- ----- --- --- --------------- ------------ ------- --------- ---- --------------- ----- ---- -- - ---------- -------- ------- ------- --- --- ------------- ---- ---- ----- -- - -- --------- --- -------------------- - ---------------------- ------ ------------- ------- --- - --- ---------------- -- -- - ------------------- ------- -- ---- ------- ---
总结
本文介绍了如何使用 Express.js 和 JWT 构建安全的 Web 应用程序。我们通过创建 JWT,设置路由和验证 JWT,来保证用户信息的安全和系统的安全。学习本文,你将能够掌握如何使用 Express.js 和 JWT 构建安全的 Web 应用程序,并可以使用示例代码作为模板,快速构建一个安全的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e70b7af6b2d6eab3263bdf