// 解析并验证 JWT Token,返回一个数组function decode_token($token, $key) { try { $decoded = JWT::decode($token, $key, array('HS256')); if ($decoded === null) { throw new Exception('Invalid token'); } return (array)$decoded; // 将解析的工具转化为数组返回 } catch (Exception $e) { // Token 验证失落败,返回缺点信息 return array('error' => 'Failed to decode token: ' . $e->getMessage()); }}// 天生一个新的 JWT Tokenfunction create_token($data, $key, $ttl) { $issuedAt = time(); $payload = array( "iat" => $issuedAt, // 签发韶光 "exp" => $issuedAt + $ttl, // 过期韶光 "data" => $data // 自定义数据 ); return JWT::encode($payload, $key, 'HS256');}// 判断 JWT Token 是否快要过期function is_token_near_expiry($expiresAt) { $interval = strtotime($expiresAt) - time(); if ($interval < 60) { // 如果过期韶光小于1分钟,则认为 Token 快要过期 return true; } return false;}// 刷新 JWT Token 并返回一个新的 Tokenfunction refresh_token($token, $key, $ttl) { $decoded = decode_token($token, $key); if (isset($decoded['error'])) { // 如果解析 Token 失落败,则直接返回缺点信息 return $decoded; } $data = $decoded['data']; $expiresAt = date('Y-m-d H:i:s', time() + $ttl); if (!is_token_near_expiry($decoded['exp'])) { // 如果 Token 还没有快要过期,则不须要刷新 Token $newToken = $token; } else { $newToken = create_token($data, $key, $ttl); } return array( 'token' => $newToken, 'expiresAt' => $expiresAt );}
在上述示例代码中,decode_token、create_token 和 is_token_near_expiry 函数用来解析、创建和判断 Token,refresh_token 函数则用来刷新 Token。当客户端要求做事端时,做事端会先解析并验证 JWT Token,如果 Token 将要快要过期,则调用 refresh_token 函数天生一个新的 Token 并返回给客户端。客户端在收到新的 Token 后,将旧的 Token 更换为新的 Token,以担保后续的要求都可以利用有效的 Token 进行访问。
请把稳:JWT Token 的安全性取决于密钥的保密程度。在实际支配过程中,请务必采纳安全方法确保密钥的安全。