header('Authorization', ''); if (empty($authorization) || strpos($authorization, 'Bearer ') !== 0) { return response(['code' => 1, 'msg' => '缺少 Authorization 头或格式无效'], 200); } // 提取 JWT token $jwtToken = substr($authorization, 7); // dump($jwtToken); // return Json([ // 'code' => 0, // 'msg' => 'ok', // 'data' => $jwtToken, // ]); try { // 调用 AuthRpcClient 进行 JWT 验证 // $authRpcClient = new AuthRpcClient(); // $response = $authRpcClient->validateJwtToken($jwtToken); // // // 如果验证不通过,返回错误消息 // if ($response['result'] !== 'JWT_VERIFY_OK') { // return response([ // 'code' => 1, // 'msg' => $this->getErrorMessage($response['result']), // ], 200); // } // // // 如果验证通过,将用户数据 (claims) 存入请求属性,供后续使用 // $request = $request->withAttribute('user', $response['claims']); // // // 如果返回了新 token,将其添加到响应头 X-New-Token 中 $response = $handler($request); // if (!empty($response['new_token'])) { // $response = $response->withHeader('X-New-Token', $response['new_token']); // } return $response; } catch (Exception $e) { return response(['code' => 1, 'msg' => 'JWT 验证失败: ' . $e->getMessage()], 200); } } private function getErrorMessage($result) { switch ($result) { case 'JWT_VERIFY_BAD_FORMAT': return '无效的 token 格式'; case 'JWT_VERIFY_SIGN_FAILED': return 'token 签名无效'; case 'JWT_VERIFY_EXPIRED': return 'token 已过期'; case 'JWT_VERIFY_REVOKED': return 'token 已被撤销'; case 'JWT_VERSION_LOW': return 'token 版本过低'; default: return '未知错误'; } } }