deepseek:以php为例,获取令牌后下一步处理步骤
在 PHP 中,获取到 Bearer Token 后,下一步通常是验证令牌的有效性,并根据令牌中的信息处理请求。以下是详细的步骤和代码示例:
1. 获取 Authorization 头中的令牌
首先,从 HTTP 请求头中提取 Authorization 字段,并解析出 Bearer Token。
<?php
// 获取 Authorization 头
$headers = getallheaders();
$authHeader = $headers['Authorization'] ?? '';
// 检查是否包含 Bearer 前缀
if (strpos($authHeader, 'Bearer ') === 0) {
// 提取令牌
$token = substr($authHeader, 7);
} else {
// 如果没有 Bearer 前缀,返回错误
http_response_code(401);
echo json_encode(['error' => 'Invalid token format']);
exit;
}
?>
2. 验证令牌的有效性
获取到令牌后,需要验证其有效性。常见的验证方式包括:
- JWT 令牌:解析并验证签名、有效期等。
- Opaque 令牌:向授权服务器发送请求验证令牌。
以下以 JWT 令牌为例:
(1)安装 JWT 库
使用 firebase/php-jwt 库来解析和验证 JWT 令牌。
composer require firebase/php-jwt
(2)验证 JWT 令牌
<?php
require 'vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$secretKey = 'your-secret-key'; // 用于验证签名的密钥
try {
// 解码并验证令牌
$decoded = JWT::decode($token, new Key($secretKey, 'HS256'));
// 令牌验证通过,可以访问解码后的数据
$userId = $decoded->user_id; // 例如:获取用户 ID
$role = $decoded->role; // 例如:获取用户角色
// 继续处理请求
echo json_encode(['user_id' => $userId, 'role' => $role]);
} catch (Exception $e) {
// 令牌无效
http_response_code(401);
echo json_encode(['error' => 'Invalid token: ' . $e->getMessage()]);
exit;
}
?>
3. 根据令牌信息处理请求
验证令牌后,可以根据令牌中的信息(如用户 ID、角色等)执行相应的业务逻辑。
示例:根据用户角色返回不同数据
<?php
// 假设 $decoded 是解码后的令牌数据
$role = $decoded->role;
if ($role === 'admin') {
// 管理员权限
echo json_encode(['message' => 'Welcome, Admin!']);
} elseif ($role === 'user') {
// 普通用户权限
echo json_encode(['message' => 'Welcome, User!']);
} else {
// 无权限
http_response_code(403);
echo json_encode(['error' => 'Access denied']);
exit;
}
?>
4. 返回响应
根据业务逻辑处理完成后,返回相应的 HTTP 响应。
示例:返回 JSON 数据
<?php
header('Content-Type: application/json');
echo json_encode([
'status' => 'success',
'data' => [
'user_id' => $userId,
'role' => $role,
],
]);
?>
5. 完整代码示例
以下是一个完整的 PHP 示例,包括获取令牌、验证令牌和处理请求:
<?php
require 'vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
// 获取 Authorization 头
$headers = getallheaders();
$authHeader = $headers['Authorization'] ?? '';
// 检查是否包含 Bearer 前缀
if (strpos($authHeader, 'Bearer ') === 0) {
$token = substr($authHeader, 7);
} else {
http_response_code(401);
echo json_encode(['error' => 'Invalid token format']);
exit;
}
// 验证 JWT 令牌
$secretKey = 'your-secret-key'; // 用于验证签名的密钥
try {
$decoded = JWT::decode($token, new Key($secretKey, 'HS256'));
// 令牌验证通过,处理请求
$userId = $decoded->user_id;
$role = $decoded->role;
if ($role === 'admin') {
echo json_encode(['message' => 'Welcome, Admin!']);
} elseif ($role === 'user') {
echo json_encode(['message' => 'Welcome, User!']);
} else {
http_response_code(403);
echo json_encode(['error' => 'Access denied']);
}
} catch (Exception $e) {
http_response_code(401);
echo json_encode(['error' => 'Invalid token: ' . $e->getMessage()]);
}
?>
6. 总结
- 获取令牌:从
Authorization头中提取Bearer Token。 - 验证令牌:使用 JWT 库或其他方式验证令牌的有效性。
- 处理请求:根据令牌中的信息(如用户 ID、角色等)执行业务逻辑。
- 返回响应:根据处理结果返回相应的 HTTP 响应。
通过这种方式,可以确保只有持有有效令牌的客户端才能访问受保护的资源。

浙公网安备 33010602011771号