AIFreeAPI Logo

Codex: ошибка Token Exchange Failed — найдите этап сбоя до повторного входа

A
4 min readOpenAI Codex

Успех в браузере ещё не означает, что процесс Codex получил токен. Сначала отличите обмен кода, callback и refresh, затем исправляйте нужный хост.

Русская схема восстановления Codex при token exchange failed: сохранить состояние, найти реальный хост, войти заново и проверить небольшой задачей

Token exchange failed и Your access token could not be refreshed относятся к аутентификации Codex, но возникают на разных этапах. В первом случае процесс не завершил обмен результата браузерной авторизации на токены. Во втором уже существующая сессия не смогла обновиться. OpenAI не публикует исчерпывающую таблицу, где каждая такая строка равна одной причине.

Сообщение браузера об успешном входе не доказывает, что Codex получил callback на локальный loopback-интерфейс, достиг token endpoint и сохранил credentials. Найдите реальный процесс и последний завершённый шаг. Тогда станет понятно, нужен ли повторный вход, device auth, SSH forwarding или проверка сети и TLS.

Что говорит окончание ошибки

Сохраните полный текст, предварительно удалив секреты. Последняя часть сообщения задаёт разумную первую проверку:

Наблюдаемый признакЧто уже известноСледующее действие
error sending request for url (.../oauth/token), timeout или connection errorЗапрос от процесса Codex к token endpoint не завершилсяПроверить сеть, proxy и TLS именно на хосте процесса
token endpoint returned status 403Endpoint получил запрос и отказалСохранить статус и очищенный контекст; проверить аккаунт, workspace и управляемые правила без догадок о регионе
Браузер завершил вход, а CLI продолжает ждатьCallback на локальный loopback-интерфейс мог не дойти до CodexПроверить WSL, SSH, container или удалённый extension host
access token could not be refreshedРанее сохранённая сессия не обновиласьПроверить auth status в реальном окружении и пересоздать credentials поддерживаемой командой
CERTIFICATE_VERIFY_FAILED или явная CA-ошибкаПроцесс не доверяет увиденной цепочке сертификатовИспользовать доверенный корпоративный CA bundle только при подтверждённом TLS interception

Это границы диагностики, а не готовый диагноз. Например, 403 означает отказ, но сам по себе не называет аккаунт, подписку, регион или proxy причиной.

Русская карта этапов OAuth в Codex: exchange, callback на локальный loopback-интерфейс и refresh, признаки ошибки, реальный хост, пересоздание сессии, исключения удалённого входа и явные сигналы успеха
Русская карта этапов OAuth в Codex: exchange, callback на локальный loopback-интерфейс и refresh, признаки ошибки, реальный хост, пересоздание сессии, исключения удалённого входа и явные сигналы успеха

Сначала сохраните состояние проекта

Ошибка аутентификации сама по себе не удаляет файлы. Риск появляется, когда пользователь одновременно перезапускает несколько клиентов, создаёт дубликаты задачи или стирает каталоги в надежде очистить кэш.

Перед выходом:

  • проверьте незакоммиченные изменения в репозитории;
  • сохраните неотправленный запрос и полный текст ошибки без личных данных;
  • запишите время и часовой пояс, версию клиента, поверхность Codex и путь проекта;
  • отметьте последнее успешно завершённое действие;
  • остановите повторные запуски одной задачи в разных окнах.

Никому не отправляйте auth.json, access token, refresh token, API key, OTP, Cookie или необработанный HAR. В официальной документации по аутентификации OpenAI предупреждает: файловый auth.json содержит токены доступа и должен защищаться как пароль.

Определите, где действительно работает Codex

Окно на ноутбуке может быть лишь интерфейсом. Расширение VS Code способно работать на Remote SSH, терминал — внутри WSL или контейнера, а отдельный gateway — хранить собственный OAuth-профиль.

ПоверхностьГде сначала искать сохранённую сессиюЧто не является доказательством выхода
Codex AppАктивный профиль приложения и локальное хранилище credentialsВыход из другого профиля браузера
Локальный CLIТекущий пользователь ОС и его CODEX_HOMEРаботающий сайт ChatGPT
IDEЛокальный или удалённый extension hostПереустановка только интерфейса редактора
WSL, SSH, контейнер, VMHome-каталог или keyring внутри этой средыВыход на основной машине
Сторонний агентЕго собственный auth-профильИсправный отдельный Codex CLI

OpenAI указывает, что CLI и расширение IDE могут использовать общий кэш. Он хранится в ~/.codex/auth.json либо в системном хранилище учётных данных. Поэтому ручное удаление случайного файла — плохой первый шаг: нужные данные могут находиться в keyring или принадлежать другому пользователю.

Русская схема повторной аутентификации на правильном хосте Codex с командами status logout login, перезапуском App IDE CLI, вариантами device code SSH и корпоративного TLS и тремя доказательствами восстановления
Русская схема повторной аутентификации на правильном хосте Codex с командами status logout login, перезапуском App IDE CLI, вариантами device code SSH и корпоративного TLS и тремя доказательствами восстановления

Пересоздайте сессию CLI и IDE

Запускайте команды на том хосте, где выполняется проблемный процесс. Сначала посмотрите активный способ аутентификации:

bash
codex login status

Команда показывает наличие credentials и активный режим. Это помогает обнаружить, например, API-key режим вместо ожидаемого входа ChatGPT или другого пользователя ОС в удалённой среде.

Затем используйте поддерживаемый выход и новый вход:

bash
codex logout codex login

В браузере выберите нужный аккаунт ChatGPT и workspace. После завершения снова выполните codex login status.

Текущая документация по аутентификации описывает codex login, codex login status и codex logout. После повторного входа полностью перезапустите IDE: уже работающий extension host может удерживать старое состояние, даже когда общий кэш обновлён.

В приложении Codex проверьте аккаунт или статус API key в меню профиля, выйдите именно там, полностью закройте приложение и войдите снова. Выход из chatgpt.com в одном браузере не гарантирует очистку локальных данных приложения.

Если повторный вход не возвращается в Codex

После очистки старых credentials сбой нового входа — уже другая ветка. Если CLI запущен на удалённой машине без браузера или локальный callback недоступен, используйте device code, когда он разрешён аккаунтом или администратором:

bash
codex login --device-auth

Откройте выданную ссылку, войдите и введите одноразовый код. Не пересылайте этот код другим людям.

Если сохраняется обычный browser flow, а CLI запущен на доступном по SSH хосте, официальный callback по умолчанию использует локальный loopback-порт 1455. Создайте туннель с локальной машины и запустите вход в той же SSH-сессии:

bash
ssh -L 1455:[::1]:1455 user@remote codex login

Не открывайте порт 1455 в интернет и не добавляйте туннель для локального CLI. Этот способ исправляет только маршрут callback; он не устраняет 403 endpoint или ошибку сертификата.

В корпоративной сети TLS-прокси может подменять сертификат. Официальная документация предусматривает CODEX_CA_CERTIFICATE с доверенным PEM bundle. Прямой запуск codex login также создаёт отдельный codex-login.log в настроенном каталоге логов. Он полезен для диагностики callback, сертификата и браузерного входа, но перед передачей удалите токены, email, идентификаторы workspace и приватные пути.

Управляемая среда может принудительно требовать ChatGPT или API key и ограничивать вход определённым workspace. Если свежий аккаунт немедленно отклоняется, дальнейшее удаление локального кэша бессмысленно: администратор должен проверить membership, provisioning, разрешённый метод и workspace.

Workload identity — отдельное исключение. Когда credentials выдаёт окружение процесса, codex login и codex logout отклоняются. Исправлять нужно identity provider, federation rule или конфигурацию runtime, а не пользовательский файл.

Проверьте не экран входа, а маленькую задачу

У восстановления есть три наблюдаемых признака:

  1. codex login status показывает ожидаемый режим.
  2. App или IDE показывает нужный аккаунт и workspace, если эта информация доступна.
  3. Небольшая безопасная задача завершается в том же проекте и окружении, где была ошибка.

Начните с чтения и краткого описания одного несекретного файла. Не возобновляйте крупную запись сразу. Если тест проходит, сначала проверьте уже существующие изменения, а затем продолжайте исходную задачу.

Новый код ошибки меняет диагностику. HTTP 429 относится к ограничениям Codex, зависшее соединение или инструмент — к диагностике тайм-аута, а запрос телефона, MFA или device verification — к проверке входа Codex.

Что передать в поддержку

Если новый официальный вход выполнен на правильном хосте, но ошибка обновления повторяется, подготовьте минимальный пакет:

  • очищенный текст ошибки, время и часовой пояс;
  • App, CLI или IDE и версию;
  • ОС и контекст: local, WSL, SSH, контейнер или VM;
  • активный способ входа без токена и полного идентификатора аккаунта;
  • результат logout и нового browser/device flow;
  • результат одной небольшой проверочной задачи;
  • очищенный фрагмент codex-login.log, только если не завершился новый вход.

Не прикладывайте auth.json, токены, API keys, OTP, Cookie, полный HAR или скриншоты с секретами. Исправление завершено не тогда, когда снова появилась форма входа, а когда новые credentials на правильном хосте связаны с нужным аккаунтом и выполняют ограниченную задачу Codex.