📅  最后修改于: 2023-12-03 15:41:24.163000             🧑  作者: Mango
在开发 web 应用过程中,我们通常需要验证用户身份,以便在保护资源和数据的同时,为用户提供个性化的服务。JWT(JSON Web Tokens)是一种流行的身份验证机制,它是一种安全的、开放标准的 JSON 格式的令牌,由三部分组成:头部、载荷和签名,可以在网络间可靠传输,有效地保证了身份验证的安全性。
在 TypeScript 中,我们可以使用 Express 库和 JWT 库来实现自定义 API 端点的 JWT 令牌。以下是详细步骤:
在开始之前,我们需要先安装 Express 和 jsonwebtoken 两个库,可以使用 npm 安装:
npm install express jsonwebtoken
在 TypeScript 中,我们需要先导入需要的库和类型。在本例中,我们需要导入 Express 库和 jsonwebtoken 库。同时,为了方便演示,我们还需要导入该项目中的 User 类型和 users 数组。
import express, { Request, Response } from "express";
import jwt from "jsonwebtoken";
type User = {
id: number;
name: string;
password: string;
};
const users: User[] = [
{ id: 1, name: "Alice", password: "password1" },
{ id: 2, name: "Bob", password: "password2" },
];
我们需要编写一个身份验证函数,用于验证用户提供的用户名和密码是否匹配。该函数将返回一个 boolean 值,表示用户是否通过验证。
function authenticateUser(name: string, password: string): boolean {
return users.some(
(user) => user.name === name && user.password === password
);
}
在应用中,我们需要定义一个全局的 JWT 密钥,用于签发和验证 JWT 令牌。我们可以将该密钥定义为一个环境变量,或者在代码中直接硬编码。
const jwtSecret = "secret";
我们需要编写一个登录 API 端点,该端点将接收用户提供的用户名和密码,然后返回一个 JWT 令牌,表示用户已经通过验证。在该端点中,我们需要调用身份验证函数,如果用户通过验证,则生成 JWT 令牌并返回。
const app = express();
app.post("/login", (req: Request, res: Response) => {
const name = req.body.name;
const password = req.body.password;
if (authenticateUser(name, password)) {
const token = jwt.sign({ name }, jwtSecret);
res.send({ token });
} else {
res.status(401).send({ message: "Invalid credentials" });
}
});
我们还需要编写一个受保护的 API 端点,该端点将仅允许已通过身份验证的用户访问。在该端点中,我们需要验证 JWT 令牌的有效性,如果令牌有效,则返回该用户的一些数据。
app.get("/user", (req: Request, res: Response) => {
const token = req.headers["authorization"];
if (!token) {
return res.status(401).send({ message: "Missing authorization header" });
}
try {
const decoded = jwt.verify(token, jwtSecret) as { name: string };
const user = users.find((user) => user.name === decoded.name);
if (!user) {
return res.status(401).send({ message: "Invalid token" });
}
res.send({ user });
} catch (error) {
res.status(401).send({ message: "Invalid token" });
}
});
在本文中,我们介绍了如何在 TypeScript 中实现自定义 API 端点 JWT 令牌的身份验证机制。首先,我们需要安装 Express 和 jsonwebtoken 两个库,并导入需要的类型和数据。其次,我们需要编写身份验证函数,用于验证用户名和密码。接着,我们需要定义全局 JWT 密钥,用于签发和验证 JWT 令牌。最后,我们需要编写登录和受保护的 API 端点,分别用于生成 JWT 令牌和验证 JWT 令牌。通过上述步骤,我们可以有效地实现一个安全、可靠的身份验证机制。