Сообщение Token exchange failed: token endpoint returned status 403 Forbidden подтверждает отказ запроса аутентификации, но само по себе не доказывает сбой OpenAI, проблему прокси, ограничение региона или устаревшие учётные данные. Сначала отделите обратный вызов localhost, исходящий обмен токена и первый запрос после входа. До сброса запишите codex --version, выполните codex login status, укажите реальную среду запуска Codex и сохраните текст ответа без секретов. Не удаляйте ~/.codex, не отключайте проверку TLS, не обходите региональные правила и не публикуйте callback URL или токен.
| Наблюдение | Где произошёл сбой | Первая проверка |
|---|---|---|
| Браузер не вернулся в Codex | callback localhost | Доступен ли слушатель из среды браузера |
| Браузер подтвердил вход, затем появился точный 403 обмена | исходящий token exchange | Текст ответа, прокси/WAF, CA, регион/аккаунт и среда запуска |
| Вход завершился, а 403 пришёл на первой команде | аутентифицированный запрос | Права рабочей области, модель, провайдер и источник учётных данных |
Сбой callback — не отказ token endpoint. Последующий API 403 — не ошибка обмена. Исправляйте только подтверждённый этап. Если ответ прямо называет аккаунт, рабочую область, политику или страну, прекратите менять прокси.
“Проверено 12 июля 2026 года: на официальной странице статуса не было известного общего инцидента. Зелёный статус не проверяет корпоративную сеть, конкретный аккаунт, рабочую область или региональный маршрут.
Пять действий до любых радикальных изменений
1. Зафиксируйте версию и способ входа
В той же оболочке, WSL, контейнере, SSH-хосте или IDE выполните:
bashcodex --version codex login status
Текущая контрольная среда показала codex-cli 0.144.0-alpha.4. Это пример, а не минимальная версия. Запишите собственный результат.
2. Проверьте состояние сервиса
Откройте OpenAI Status и сохраните время проверки. Активный инцидент — причина подождать, а не переписывать локальную конфигурацию. При зелёном статусе продолжайте диагностику локального маршрута.
3. Назовите среду выполнения
Браузер может работать на ноутбуке, а процесс Codex — в WSL, контейнере или на удалённом сервере. Если браузер не достигает слушателя, это топология callback. Если Codex получил callback и после него написал о 403 token endpoint, исследуйте исходящий обмен.
4. Сохраните ответ без секретов
Оставьте точный статус, время и часовой пояс, версию, команду, короткий код и request ID. Удалите authorization code, access/refresh token, полный callback URL, cookies, API key, email, ID организации и пароль прокси. Код политики или фирменная страница блокировки полезнее голого числа 403.
5. Повторите вход один раз
Меняйте одну причину: версию, разрешённую сеть, среду запуска, доверенный CA или состояние входа. Успех подтверждается не страницей браузера, а командой:
bashcodex login status
в той же среде и одним рабочим запросом Codex.
Пять этапов маршрута аутентификации

Последовательность такова: авторизация в браузере, callback localhost, обмен кода на токены, сохранение учётных данных, первый аутентифицированный запрос. Рассматриваемое сообщение относится к третьему этапу. Возможные владельцы отказа: политика или аккаунт OpenAI, корпоративный прокси/WAF, TLS inspection и цепочка CA, неверная среда выполнения или устаревший контекст входа.
Официальная документация аутентификации Codex описывает способы входа и хранение учётных данных. В справочнике переменных окружения указан CODEX_CA_CERTIFICATE для доверенного пользовательского CA. Это безопаснее отключения проверки сертификата.
Матрица доказательств и действий

| Ветка | Доказательство | Действие | Признак успеха | Когда остановиться |
|---|---|---|---|---|
| прокси/WAF | корпоративная страница блокировки или ID прокси | запросить разрешение auth-маршрута, оставить loopback локальным | один чистый вход | не обходить политику компании |
| корпоративный CA | ошибка цепочки и документированный TLS inspection | подключить одобренный PEM bundle | обмен проходит при включённой проверке | не использовать insecure TLS |
| WSL/контейнер/remote | браузер и слушатель в разных сетевых пространствах | войти там, где callback достижим, либо выбрать официальный альтернативный способ | callback приходит в нужный процесс | не публиковать порт наружу |
| регион/аккаунт | unsupported_country_region_territory или ограничение аккаунта | сверить поддерживаемые страны, при ошибке обратиться в поддержку | официальный маршрут разрешён | не использовать VPN или чужой аккаунт |
| рабочая область | личный вход работает, SSO отклонён | попросить администратора проверить Codex и identity policy | вход в нужную область работает | при явной политике не менять локальную сеть |
| кэш авторизации | сеть и политика проверены, logout меняет поведение | codex logout, затем один чистый codex login | ожидаемый способ входа и рабочий запрос | не удалять весь каталог первым шагом |
Прокси и CA: loopback не равен исходящему запросу
Если прокси обязателен, локальные адреса обычно остаются вне него:
bashexport NO_PROXY="localhost,127.0.0.1,::1"
Но исходящий token endpoint может быть обязан идти через разрешённый корпоративный прокси. Не добавляйте все домены OpenAI в NO_PROXY наугад. Переменные можно проверить, скрыв логины и внутренние адреса:
bashenv | grep -iE '^(HTTP|HTTPS|ALL|NO)_PROXY='
Для одобренной TLS inspection используйте выданный службой безопасности PEM:
bashexport CODEX_CA_CERTIFICATE="/path/to/company-ca-bundle.pem" codex login
Сбрасывайте только слой входа
Безопасная последовательность:
bashcodex logout codex login
Не начинайте с rm -rf ~/.codex: там находятся конфигурация, состояние и диагностические данные. Назначение файлов разобрано в руководстве по Codex config.toml. Не копируйте чужой auth.json и не прикладывайте свой файл к публичному issue.
В проверенном CLI доступны --device-auth, --with-api-key и --with-access-token. Device auth может решить топологию браузер—localhost, но не отменяет политику аккаунта или региона. API key переводит работу на разработческий биллинг и другой набор границ; сравнение есть в Codex API key и подписка. Access token допустим только в доверенном документированном процессе.
Как читать конкретные варианты симптома
Если браузер показывает успех, а терминал продолжает ждать, не переходите сразу к token endpoint. Скорее всего, callback не достиг процесса Codex. Проверьте, не работает ли браузер на хосте, а CLI — в WSL, контейнере или на SSH-сервере. Страница успеха подтверждает согласие пользователя, но не доставку результата локальному listener. Используйте среду с достижимым callback или официальный device auth; не выставляйте локальный порт в Интернет.
Если терминал явно печатает token endpoint 403, сравните форму ответа. JSON с policy code, HTML с логотипом и block ID корпоративного прокси и короткий текст без структуры указывают на разных владельцев. Сохраняйте очищенный body вместе с request ID и временем. Один и тот же account/region code в разных разрешённых сетях сильнее указывает на политику, чем на proxy.
Если рядом встречаются ошибка сертификата и 403, разделите их по времени. При провале TLS handshake настоящий HTTP-ответ OpenAI мог ещё не прийти. После установки одобренного CA handshake может заработать, а отдельный JSON 403 остаться; это означает, что цепочка доверия исправлена, но существует другая ветка. Не скачивайте случайные сертификаты и не задавайте глобальное отключение TLS.
Если проблема существует только в WSL или контейнере, сравните версию Codex, proxy-переменные, NO_PROXY, CA и codex login status с рабочим хостом. Не копируйте auth.json с хоста: это раскрывает токен и скрывает исходную проблему сети или хранилища. Отдельно отличайте потерю состояния после перезапуска контейнера от 403 во время обмена.
Для Business, Enterprise и SSO проверьте, какой аккаунт и организация выбраны в браузере. Администратор должен подтвердить включение Codex, членство, принудительный SSO, conditional access и identity mapping. Успех личного аккаунта не доказывает право управляемой рабочей области. После изменения политики повторите вход один раз в том же workspace.
Короткая воспроизводимая запись должна содержать время и часовой пояс, OS/runtime, версию, способ входа, результат callback, очищенный статус exchange, тип сети, одно изменение и результат. Не меняйте одновременно браузер, сеть, аккаунт и версию: даже успех не покажет причину. Не повторяйте login без остановки, не очищайте браузер и весь ~/.codex одновременно, не отправляйте необработанные логи и не смешивайте 403 стороннего API-провайдера с OpenAI OAuth. Если форма ответа и этап сбоя не меняются, повтор той же операции не создаёт нового доказательства; передайте запись владельцу этого слоя.
Эскалация и безопасный пакет доказательств

При явном отказе аккаунта, рабочей области, политики или региона эскалируйте сразу. В остальных случаях — после одной чистой попытки на текущей версии и разрешённом маршруте. Передайте точную ошибку и очищенный ответ, время, версию, способ входа, ОС и среду, результат callback, наличие прокси/WAF/TLS inspection, request ID или ID /feedback, а также одно изменение и его результат.
Никогда не передавайте callback URL, authorization code, токен, API key, cookie, полный auth.json или URL прокси с учётными данными. После восстановления входа вопросы квоты относятся к лимитам Codex, а не к обмену токена.
Часто задаваемые вопросы
Почему браузер сообщил об успехе, а Codex — об ошибке?
Авторизация пользователя и обмен кода — разные запросы. Второй может быть отклонён прокси, политикой, аккаунтом или старым контекстом.
Нужно ли добавлять OpenAI в NO_PROXY?
Не автоматически. Loopback можно оставить локальным, но исходящий запрос может быть обязан проходить через корпоративный прокси.
Поможет ли API key?
Это допустимый разработческий способ входа, но он меняет биллинг и возможности. Он не обходит ограничения аккаунта, области или поддерживаемой страны.
Когда прекратить локальные попытки?
Сразу при явном policy/account/workspace/region отказе либо после одной чистой попытки с теми же доказательствами. Дальше нужен владелец отклонившего слоя.
