unauthorized: token: [REDACTED] "error": { "message": "Your session has ended. P...

2026年10月23日 18:21 27.99 秒 success

错误信息

unexpected status 503 Service Unavailable: CC Switch local proxy failed while handling Codex endpoint /responses. Provider: My Codex; model: gpt-6-sol; upstream_status: HTTP 503; cause: auth_unavailable: no auth available (providers=codex, model=gpt-6-sol; last upstream error: unauthorized: token: [REDACTED] "error": { "message": "Your session has ended. Please log in again.", "type": "invalid_request_error", "param": null, "code": "refresh_token_invalidated" } }), url: http://127.0.0.1:15721/v1/responses

AI 解决方案

🌐 错误翻译


原文:unexpected status 503 Service Unavailable: CC Switch local proxy failed while handling Codex endpoint /responses. Provider: My Codex; model: gpt-6-sol; upstream_status: HTTP 503; cause: auth_unavailable: no auth available (providers=codex, model=gpt-6-sol; last upstream error: unauthorized: token: [REDACTED] "error": { "message": "Your session has ended. Please log in again.", "type": "invalid_request_error", "param": null, "code": "refresh_token_invalidated" } }), url: http://127.0.0.1:15721/v1/responses
译文:意外的状态码503服务不可用:在处理Codex端点/responses时,CC Switch本地代理失败。提供商:My Codex;模型:gpt-6-sol;上游状态:HTTP 503;原因:身份验证不可用:无可用身份验证(提供商=codex,模型=gpt-6-sol;最后一次上游错误:未授权:令牌:[已隐藏] "error": { "message": "您的会话已结束。请重新登录。", "type": "invalid_request_error", "param": null, "code": "refresh_token_invalidated" } }),网址:http://127.0.0.1:15721/v1/responses

🎯 原因分析


根本原因是身份验证令牌失效,核心是refresh_token_invalidated(刷新令牌无效),导致API调用时无有效凭据,上游服务返回401未授权错误,最终代理层返回503服务不可用。

💡 解决方案


// 1. 重新登录获取新的访问令牌和刷新令牌
const loginRequest = await fetch('http://127.0.0.1:15721/v1/auth/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    username: 'your_username',
    password: 'your_password'
  })
});

const { access_token, refresh_token } = await loginRequest.json();

// 2. 存储有效令牌并添加令牌刷新逻辑
const tokenStore = {
  access_token,
  refresh_token,
  expires_at: Date.now() + 3600 * 1000 // 假设令牌有效期1小时
};

// 请求拦截器:自动刷新失效令牌
async function requestWithAuthRefresh(url, options = {}) {
  const headers = { ...options.headers, Authorization: `Bearer ${tokenStore.access_token}` };
  let response = await fetch(url, { ...options, headers });

  // 若返回401,尝试用刷新令牌换取新令牌
  if (response.status === 401 && tokenStore.refresh_token) {
    const refreshRes = await fetch('http://127.0.0.1:15721/v1/auth/refresh', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ refresh_token: tokenStore.refresh_token })
    });

    if (refreshRes.ok) {
      const newTokens = await refreshRes.json();
      Object.assign(tokenStore, newTokens, { expires_at: Date.now() + 3600 * 1000 });
      headers.Authorization = `Bearer ${tokenStore.access_token}`;
      response = await fetch(url, { ...options, headers });
    } else {
      // 刷新失败,需重新登录
      console.error('刷新令牌失败,请重新登录');
      throw new Error('令牌刷新失败,需重新登录');
    }
  }

  return response;
}

// 3. 使用带身份验证的请求发起业务调用
const apiResponse = await requestWithAuthRefresh('http://127.0.0.1:15721/v1/responses', {
  method: 'POST',
  body: JSON.stringify({ model: 'gpt-6-sol', messages: [{ role: 'user', content: '你好' }] })
});

🛡️ 预防措施


  • 令牌自动刷新机制:实现令牌过期前自动刷新(如在过期前30分钟触发刷新),避免因令牌失效导致请求中断。

  • 统一身份验证拦截器:在请求层统一处理身份验证,集中管理令牌的存储、刷新和错误重试逻辑,减少重复代码。

  • 推荐工具:使用Axios配合axios-retry和自定义拦截器,或Postman的身份验证管理器,简化令牌管理流程。