Codex token exchange failed 403: как восстановить вход
При token exchange failed сначала прочитайте текст после двоеточия: error sending request требует проверки сети процесса, а настоящий 403 — причины отказа. Исправление проверяют на том же хосте и с тем же способом входа.
Содержание

Если Codex пишет Token exchange failed: token endpoint returned status 403 Forbidden, найдите в ответе причину отказа и проверяйте именно её: корпоративный фильтр, ограничение аккаунта или рабочей области требуют разных действий. Если после двоеточия стоит error sending request, сначала проверьте исходящую сеть процесса Codex. Браузер может успешно открыть ChatGPT, пока CLI в WSL, контейнере или на сервере не может выполнить обмен.
Практический порядок: сохраните полный текст без секретов, установите этап сбоя, измените одну подтверждённую причину и повторите исходный вход в той же среде. Удаление всего ~/.codex, бесконечные попытки входа и смена способа оплаты не помогают установить, что сломалось.
| Что вы видите | Что проверять первым | Следующее действие |
|---|---|---|
Token exchange failed: error sending request… | DNS, соединение, прокси и доверенные сертификаты там, где работает Codex | Проверить настройки процесса; передать конкретную сетевую ошибку владельцу сети |
token endpoint returned status 403 Forbidden | Очищенный текст ответа, код отказа, адрес сервиса | Выбрать ветку по причине; при явном запрете доступа обратиться в поддержку или к администратору |
| Браузер завершил авторизацию, терминал ждёт или браузер не открывает локальную страницу | Доставку обратного вызова браузера на хост Codex | Вход по коду устройства либо разрешённый SSH-туннель |
| Вход закончился, ошибка появляется только при рабочем запросе | Доступ к рабочей области, модели или выбранному провайдеру | Диагностировать запрос после входа, сохранив его адрес и точный статус |
По RFC 9110, разделу 15.5.4, HTTP 403 означает, что сервер понял запрос и отказывается его выполнять. Причина может не иметь отношения к учётным данным. Код сам по себе не устанавливает, кто отказал: ответ мог прийти от промежуточного фильтра. Повторять тот же запрос с теми же учётными данными автоматически стандарт не рекомендует.
Сохраните сведения до повторного входа
На машине, где запущен Codex, начните с двух команд:
codex --version
codex login statusЗапишите версию, способ входа, время с часовым поясом и среду: локальный терминал, IDE, WSL, контейнер или SSH. Если сбой в удалённом расширении, команда на вашем ноутбуке описывает другой процесс. Проверяйте удалённую среду отдельно.
codex login status показывает способ сохранённого входа. По справочнику команд, код завершения 0 означает наличие учётных данных. Он не доказывает, что сервер их примет, что обмен нового токена завершён или что выбранная модель доступна.
Сохраните текст после Token exchange failed, HTTP-статус, короткий код причины, request ID и название хоста из сообщения. Для прямого запуска codex login официально предусмотрен отдельный codex-login.log в настроенной папке логов — см. диагностику входа. Не предполагайте, что журнал всегда лежит в одной стандартной папке.
Прежде чем передавать фрагмент кому-либо, удалите токены, код авторизации, одноразовый код устройства, полный callback URL, cookies, API-ключи и адрес прокси с паролем. Оставьте полезную часть причины: например, название политики и ID блокировки. Не прикладывайте весь журнал или auth.json вместо короткого очищенного примера.
Также проверьте OpenAI Status для времени вашей ошибки. Если опубликован соответствующий инцидент, дождитесь восстановления и затем проверьте исходный вход. Отсутствие сообщения об инциденте не доказывает исправность аккаунта, корпоративной сети или рабочего пространства.
На каком этапе произошёл отказ

При обычном входе через ChatGPT последовательность такая: авторизация в браузере → возврат результата в Codex → обмен кода на токены → сохранение учётных данных → рабочий запрос. Команда codex login без флагов открывает браузер для OAuth-входа; это описано в официальной справке.
Успех в браузере подтверждает браузерный этап. Он ещё не подтверждает возврат результата в нужный процесс и последующий исходящий обмен. Поэтому нельзя по одной странице успеха решить, что причина — старый кэш.
Если вы получили именно HTTP 403 при обмене, ищите ответ отклонившего сервиса. Если процесс продолжает ждать обратный вызов, сначала решайте связь браузера с локальным слушателем. Если Codex уже вошёл и отказал при обращении к модели, не запускайте заново весь OAuth-процесс без признака проблемы с сессией. Для последующего 401 Incorrect API key есть отдельный разбор ошибки 401 в Codex.
error sending request: проверьте сеть процесса, прокси и CA
Сначала прочитайте продолжение сообщения: ошибка разрешения имени, соединения, тайм-аут или ошибка сертификата дают разные направления проверки. Формулировка error sending request без HTTP-ответа не подтверждает серверный 403.
Браузер, CLI и IDE могут получать разные настройки сети. То же относится к хосту, WSL и контейнеру. Проверьте, что нужный разрешённый прокси доступен из среды Codex и что приложение запущено после изменения окружения. Не вставляйте вывод env в публичный тикет: proxy URL может содержать пароль.
Для терминала с Python 3 эта команда показывает только наличие переменных, не их значения, и не делает сетевых запросов:
python3 - <<'PY'
import os
names = (
"HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "NO_PROXY",
"http_proxy", "https_proxy", "all_proxy", "no_proxy",
"CODEX_CA_CERTIFICATE", "SSL_CERT_FILE",
)
for name in names:
value = os.environ.get(name)
state = "не задана" if value is None else "пустая" if not value else "задана"
print(f"{name}: {state}")
PYРезультат описывает окружение этого терминала. Для Codex, запущенного кнопкой из IDE или приложения, нужно проверить именно его настройки запуска; новый терминал не изменяет уже работающий процесс. Наличие переменной не означает, что адрес верен или доступен.
Не полагайтесь на старый универсальный совет «Codex игнорирует системный прокси». В официальном журнале изменений уже есть добавление резервного использования системного прокси для входа и стартовых запросов. Эта запись не обещает, что любой системный прокси поддерживается на любой платформе или что он устраняет серверный 403. Фиксируйте свою версию и реальный способ запуска; при обновлении используйте прежний способ установки или управляемое обновление организации.
Обратный вызов и исходящий запрос требуют разных маршрутов
Обращение браузера к локальному слушателю должно доходить до машины Codex. Если одобренная конфигурация сети предусматривает исключение локальных адресов из прокси, проверьте это исключение. Не добавляйте все домены OpenAI в NO_PROXY: исходящий обмен может по правилам организации идти через корпоративный прокси.
Порт 1455 в документации относится к обратному вызову входа, а не к порту вашего прокси. Не подставляйте его в HTTPS_PROXY.
Ошибка сертификата: подключите одобренный PEM
Если сообщение прямо указывает на цепочку сертификатов и сеть использует корпоративную TLS-инспекцию, получите доверенный PEM у администратора. В той же оболочке перед новой попыткой входа задайте его путь:
export CODEX_CA_CERTIFICATE="/path/to/company-ca-bundle.pem"
codex loginЗамените путь существующим одобренным файлом. По документации о CA, если CODEX_CA_CERTIFICATE не задана, Codex использует SSL_CERT_FILE; настройка применяется к входу, HTTPS и защищённым WebSocket-соединениям.
Исправление подтверждается исчезновением ошибки доверия при сохранённой проверке TLS. Если после этого появился настоящий 403, сертификат и отказ доступа — две разные проблемы. Отключение проверки TLS не является исправлением 403.
Настоящий 403: выберите действие по тексту ответа

| Что есть в ответе | Что делать | Что означает результат |
|---|---|---|
| Страница корпоративного фильтра, название правила или ID блокировки | Передать администратору время, адрес сервиса и ID; попросить проверить разрешённый маршрут аутентификации | Снятие подтверждённой сетевой блокировки позволяет повторить исходный вход |
unsupported_country_region_territory или прямой отказ по стране | Проверить действующие требования сервиса; при несоответствии реальной ситуации обратиться в поддержку | Смена CA или кэша не меняет указанную сервером причину |
| Отказ аккаунта, рабочего пространства или политики | Проверить выбранный аккаунт и разрешённую рабочую область вместе с администратором | Нужны разрешённые права, а не случайная смена локальных параметров |
Только 403 Forbidden, без понятного объяснения | Сохранить очищенный ответ и request ID; установить, ответил ли прокси или целевой сервис | Голого статуса недостаточно для решения «сменить сеть» или «удалить токен» |
При явном ограничении страны, аккаунта или политики остановите повторные локальные попытки. Русский язык интерфейса и местонахождение браузера сами по себе не устанавливают право пользоваться сервисом. Вход по коду устройства, VPN, другой способ оплаты или чужие учётные данные не отменяют правила доступа.
В управляемой организации попросите проверить allowed_login_methods, allowed_chatgpt_workspaces, cli_auth_credentials_store и chatgpt_base_url. Согласно правилам локального управления аутентификацией, эти требования задаются локально через системный requirements.toml или MDM macOS и применяются до загрузки учётных данных. Те же четыре поля в облачных требованиях игнорируются.
Если нет подходящего рабочего пространства в разрешённом списке, вход через ChatGPT недоступен. Вход по API остаётся вариантом только тогда, когда он разрешён. Если доступных методов нет вовсе, клиент отказывается запускаться. Пользовательские forced_login_method и forced_chatgpt_workspace_id должны соответствовать требованиям администратора. Очистка кэша не переопределяет эти ограничения.
Браузер на другом хосте: вход по коду или SSH-туннель
Когда браузер работает на ноутбуке, а codex login — на сервере, локальный адрес браузера указывает на ноутбук. Чтобы завершить вход, результат должен попасть в процесс на сервере. Эта ветка применима при проблеме обратного вызова; она не обещает исправить отказ исходящего token endpoint.
Предпочтительный официальный вариант — вход по коду устройства, пока в бета-режиме. Сначала включите его в настройках безопасности личного ChatGPT-аккаунта либо получите разрешение администратора рабочего пространства. Затем выполните на хосте Codex:
codex login --device-authОткройте выданную ссылку в своём браузере, войдите и введите код, который напечатала ваша команда. Никому не передавайте этот код. Если настройка недоступна или запрещена, не повторяйте команду в ожидании изменения политики. Условия и последовательность приведены в официальном разделе о входе без браузера.
Если вход по коду не подходит, а SSH-проброс разрешён, со своего компьютера откройте соединение:
ssh -L 1455:localhost:1455 user@remoteЗамените user@remote своим сервером. В этой SSH-сессии запустите codex login, затем откройте напечатанный адрес на своём компьютере. Пример из документации рассчитан на стандартный callback-порт 1455; если фактический слушатель использует иной порт, туннель должен соответствовать ему. Не выставляйте callback в Интернет и не пересылайте полный адрес входа посторонним. Подробности удалённой среды разобраны в руководстве по входу в Codex на сервере без браузера.
Документация также допускает перенос своего файлового кэша после входа на машине с браузером в доверенную удалённую среду. Это запасной вариант, когда файл действительно существует и перенос разрешён. При keyring файл может отсутствовать, а нестандартный CODEX_HOME меняет путь. Переносите его только защищённым способом между своими доверенными машинами; не прикладывайте к тикету. Такой перенос даёт серверу учётные данные, но не доказывает, что его сеть или политика доступа исправлены.
Когда нужен новый вход, а когда кэш трогать не следует
Повторный вход уместен, если Codex сообщает об отозванной сессии, либо после исправления подтверждённой причины остались неподходящие сохранённые учётные данные. Для обычного локально сохранённого входа последовательность такая:
codex logout
codex login
codex login statusПеред выходом учтите последствия. По документации о кэше входа, CLI и расширение IDE используют общие сохранённые учётные данные, поэтому выход из одного потребует нового входа в другом. Токены ChatGPT-сессии обычно обновляются автоматически во время работы: возраст файла сам по себе не доказывает поломку.
Хранилище определяется cli_auth_credentials_store: file — auth.json под CODEX_HOME, keyring — системное хранилище, auto — системное хранилище с резервным файлом, ephemeral — память текущего процесса. Поэтому удаление одного ~/.codex/auth.json может не затронуть активный вход. Удаление всего каталога ещё и уничтожает конфигурацию, состояние и диагностические материалы.
Если процесс выбрал workload identity из окружения, команды login и logout отклоняются. Здесь нужен владелец автоматизации и её настройки аутентификации, а не ручной сброс файлов. Эти условия описаны в официальном руководстве по аутентификации.
Проверьте восстановление на том же хосте
После одного целевого изменения повторите тот же способ входа в исходной среде. Для CLI сначала проверьте codex login status: ожидаемый метод и наличие учётных данных — первый признак. Затем запустите Codex на этом же хосте и выполните короткую задачу без приватного кода, например попросите ответить AUTH_OK.
Рабочий ответ подтверждает доступ по проверенному маршруту в этот момент. Он не проверяет все модели, инструменты или облачные функции. При API-входе даже короткая задача может оплачиваться через Platform, поэтому делайте её только с намерением использовать этот счёт. В приложении или расширении повторите исходную операцию там же: успех отдельно установленного CLI не доказывает исправность другого клиента.
Если вместо ошибки обмена появился 401, 403 доступа к модели или отказ рабочей области, сохраните новый текст: вы продвинулись к другому этапу, но задача ещё не восстановлена. Не объявляйте успех по одному выводу Logged in.
Для обращения в поддержку достаточно следующей записи:
Время и часовой пояс: …
Версия, ОС и среда Codex: …
Способ входа: ChatGPT / API / управляемая автоматизация
Обратный вызов: получен / не получен / неизвестно
Полная ошибка без секретов: …
Адрес сервиса без параметров, request ID: …
Прокси или TLS-инспекция: есть / нет / неизвестно
Одно изменение и результат: …Если причина и этап не изменились после исправления конкретного условия, передайте запись владельцу отказа. Не меняйте одновременно браузер, аккаунт, версию и сеть: даже успешный вход не покажет, какое действие помогло. Описанная последовательность основана на документации; завершённый вход или восстановление вашего аккаунта этой статьёй не проверены.
Частые вопросы
Поможет ли API-ключ вместо входа через ChatGPT?
Для локального Codex это допустимый отдельный метод, если политика разрешает API и вы намеренно выбираете оплату OpenAI Platform. Например, при уже безопасно заданной переменной OPENAI_API_KEY официальная команда передаёт ключ через стандартный ввод:
printenv OPENAI_API_KEY | codex login --with-api-keyЭто не проверка исправления ChatGPT OAuth. API-использование оплачивается отдельно, а Codex cloud требует входа через ChatGPT; часть возможностей отличается. Основание — официальная документация. Для выбора способа оплаты есть сравнение API-ключа и подписки.
Нужно ли удалять auth.json, если login status уже показывает вход?
Нет, одного этого признака недостаточно. Статус подтверждает наличие учётных данных, а причина 403 может быть в сети или политике. Сначала определите этап и хранилище. При подтверждённой проблеме обычной сохранённой сессии используйте codex logout, учитывая общий кэш CLI и IDE; workload identity требует другого процесса восстановления.
Может ли 403 относиться к стороннему провайдеру?
Да. Смотрите на адрес запроса и выбранного провайдера. При requires_openai_auth = true Codex использует авторизацию OpenAI и игнорирует env_key; при авторизации через env_key ключ принадлежит указанному провайдеру. Эти варианты определяет официальный раздел об альтернативных провайдерах. Настройка ключа, Base URL и провайдера разобрана отдельно в руководстве по config.toml. Успех на стороннем шлюзе не означает, что обмен токена OpenAI восстановлен.
Источники6
Внешние страницы, на которые ссылается это руководство, в порядке упоминания. Последнее обновление: 6 окт. 2026 г..
Источники6
Внешние страницы, на которые ссылается это руководство, в порядке упоминания. Последнее обновление: 6 окт. 2026 г..
- 1.RFC 9110, разделу 15.5.4rfc-editor.org/rfc/rfc9110.html
- 2.справочнику командlearn.chatgpt.com/docs/developer-commands
- 3.диагностику входаlearn.chatgpt.com/docs/auth
- 4.OpenAI Statusstatus.openai.com
- 5.официальном журнале измененийlearn.chatgpt.com/docs/changelog
- 6.правилам локального управления аутентификациейlearn.chatgpt.com/docs/enterprise/managed-configuration





