<?php
// 生成 Token
function generateToken() {
$token = bin2hex(random_bytes(16)); // 使用随机字节生成 token
return $token;
}
// 存储 Token(这里使用一个全局变量来模拟存储)
$tokens = [];
// 验证 Token
function validateToken($token) {
global $tokens;
// 检查 token 是否存在于存储中
if (in_array($token, $tokens)) {
return true;
}
return false;
}
// 用户登录(示例,实际使用时要连接数据库等验证逻辑)
function login($username, $password) {
if ($username === 'admin' && $password === 'password') {
// 登录成功,生成 token,并存储在服务器端
$token = generateToken();
global $tokens;
$tokens[] = $token;
return $token;
}
return false;
}
// 示例使用方法
$username = 'admin';
$password = 'password';
$token = login($username, $password);
if ($token) {
// 登录成功,返回 token 给客户端
echo "Token: " . $token;
} else {
// 登录失败
echo "用户名或密码错误!";
}
// 客户端发送请求时,在请求头中附带 token
// 例如:Authorization: Bearer <token>
// 服务器端接收请求后,验证 token
// 从请求头中获取 token
$authorizationHeader = $_SERVER['HTTP_AUTHORIZATION'];
list(, $token) = explode(' ', $authorizationHeader);
// 验证 token
if (validateToken($token)) {
echo "Token 验证通过";
} else {
echo "Token 验证失败";
}
?>
上面是简单token实现
实际过程中完整方案
- 生成 Token:在用户登录或注册成功后,使用一种安全的算法(例如 HMAC)生成一个随机的字符串作为 token。
- 存储 Token:将生成的 token 存储在服务器端,可以使用数据库、缓存或其他持久化方式。
- 返回 Token:将生成的 token 发送给客户端,可以通过将 token 作为响应的一部分或者在响应头中返回。
- 验证 Token:客户端发送请求时,将 token 放在请求的头部、URL 参数或者请求体中。服务器端接收到请求后,先获取 token,然后根据存储的 token 进行验证。验证的方式可以是比较客户端提供的 token 和服务器端存储的 token 是否一致。
- 刷新 Token:为了提高安全性,可以定期刷新 token。当客户端发送请求时,检查 token 是否即将过期。如果即将过期,服务器端生成一个新的 token,并替换掉旧的 token。然后将新的 token 返回给客户端,客户端存储并在下一次请求时使用新的 token。
- 撤销 Token:如果用户需要注销或者 token 泄露,可以撤销 token。服务器端删除存储的 token,使其失效。 这些步骤可以帮助你在 PHP 中实现 API 的 token 验证机制。请注意,安全性是非常重要的,你需要使用合适的加密算法和安全措施来保护 token 的安全性。