Saltar al contenido principal

Error 403 en el intercambio de token de Codex: diagnóstico y recuperación

Si Codex devuelve 403 al intercambiar el token, conserva el final del error y comprueba dónde se ejecuta. La respuesta permite elegir entre conexión, sesión y permisos; una pantalla de autorización correcta no confirma que Codex haya entrado.

LaoZhang AI TeamPublicadoActualizado 11 min de lectura
En esta página
Mapa conceptual de diagnóstico del inicio de Codex por el mensaje completo y el entorno afectado

Token exchange failed: token endpoint returned status 403 Forbidden significa que una petición del intercambio de credenciales ha recibido una denegación. Empieza por el final completo del error y por la máquina donde corre Codex. Si la respuesta nombra una restricción de cuenta, espacio de trabajo o país, resuelve esa condición con el administrador o con soporte. Si muestra un bloqueo de la red de tu empresa, pide revisar esa conexión. Si el navegador nunca consigue devolver la autorización al proceso, estás ante otro paso: la devolución local. En un entorno remoto, el código de dispositivo permite autorizar sin ese regreso del navegador, si está habilitado.

No hay una corrección universal por borrar auth.json, cambiar de proxy o repetir el login. El significado de HTTP 403 admite motivos ajenos a las credenciales y desaconseja repetir automáticamente la misma petición con las mismas credenciales. Además, el número por sí solo no identifica qué servidor la rechazó: podría proceder de un intermediario.

Identifica qué parte del inicio de sesión falló

La frase «el navegador dice que ya he iniciado sesión» no basta para localizar el fallo. En el flujo habitual, el navegador autoriza, devuelve el resultado a Codex, Codex intercambia el código y guarda las credenciales; después llega la primera operación autenticada. La documentación oficial de autenticación describe el inicio con navegador y el almacenamiento local.

Cinco etapas de autenticación de Codex y tres señales separadas: devolución local, HTTP 403 y fallo de transporte

Señal que tienesQué debes investigar primeroAcción que permite avanzar
La CLI espera y el navegador no puede conectar con la dirección local de retornoCómo vuelve la autorización al proceso de CodexComprueba si navegador y CLI están en máquinas o redes distintas; usa el código de dispositivo si está habilitado
Aparece Token exchange failed con 403 ForbiddenLa petición saliente de intercambio y su respuestaConserva el texto final, el código del cuerpo y cualquier identificador de petición
El error acaba en un fallo de conexión o certificado, sin respuesta HTTP confirmadaTransporte o confianza TLSComprueba la conexión autorizada y, si corresponde, el certificado corporativo
Codex ya entró, pero una tarea devuelve 403Permisos de esa operación, cuenta o proveedorComprueba el método activo y el servicio al que se dirigió la tarea
El mensaje dice que el token no pudo renovarseUna sesión ya guardadaSigue las condiciones del error de renovación; no lo confundas con el primer intercambio

Un JSON con unsupported_country_region_territory ofrece una pista distinta de una página HTML de bloqueo corporativo. Un identificador de WAF o de petición ayuda a correlacionar registros; no demuestra por sí solo quién tomó la decisión ni su causa. Si solo tienes el número 403, el siguiente paso es recuperar el contexto saneado, no elegir una causa al azar.

Comprueba el mismo entorno sin mostrar secretos

Ejecuta estos comandos donde apareció el error: dentro de WSL, del contenedor o de la sesión SSH si Codex corre allí, en lugar de hacerlo únicamente en el portátil que abre el navegador.

bash
codex --version
codex login status

Anota la versión, si se trata de CLI, IDE o aplicación de escritorio, el sistema y el método de autenticación esperado. Si el problema está en el IDE o en la aplicación, comprueba también su cuenta activa; una CLI abierta desde otro entorno puede usar otra configuración.

Según la referencia de codex login, codex login status sale con código 0 cuando hay credenciales presentes. No certifica que el servidor las acepte ni que una tarea funcione. Tampoco hace falta abrir el archivo de credenciales para saber ese estado.

En una terminal con Python 3, esta comprobación muestra solo si están definidas algunas variables relevantes. No imprime valores, abre la caché ni hace peticiones de red:

bash
python3 - <<'PY'
import os
import platform

print("Sistema:", platform.system())
for name in (
    "HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "NO_PROXY",
    "http_proxy", "https_proxy", "all_proxy", "no_proxy",
    "CODEX_HOME", "CODEX_CA_CERTIFICATE", "SSL_CERT_FILE",
):
    state = "definida" if name in os.environ else "no definida"
    print(f"{name}: {state}")
PY

«Definida» incluye un valor vacío: este inventario no determina si la configuración es válida. Compara la salida entre el entorno que falla y el que esperabas usar. El script tampoco consulta el proxy del sistema operativo ni demuestra qué proxy eligió Codex. La lista oficial de cambios ya recoge una alternativa que utiliza el proxy del sistema para peticiones de login y arranque; por tanto, no asumas que las variables de entorno son siempre la única fuente. Ese cambio no garantiza que un proxy concreto ni cualquier 403 queden resueltos.

Conserva la hora y zona horaria, el mensaje sin secretos, el tipo de conexión y el único cambio que vayas a probar. Los inicios directos con codex login escriben codex-login.log en el directorio de registros configurado, según la guía de diagnóstico. Revisa localmente el fragmento alrededor del fallo. Antes de compartirlo, quita códigos de autorización o dispositivo, tokens, cookies, claves, direcciones de retorno completas y contraseñas de proxy. No pegues el registro entero ni auth.json en un ticket.

Si la respuesta indica cuenta, país o espacio de trabajo

Detén los cambios de red cuando la respuesta identifica una denegación explícita. Confirma que estás usando la cuenta y el espacio de trabajo previstos. Si el mensaje contiene unsupported_country_region_territory, comprueba la lista oficial vigente de países admitidos para ChatGPT y acude al centro de ayuda de OpenAI si crees que la clasificación es incorrecta. No damos por comprobada aquí la elegibilidad de tu ubicación ni reproducimos una lista que puede cambiar. Cambiar la ubicación aparente o usar credenciales ajenas no es un procedimiento de recuperación de este acceso.

En una organización, pide al administrador que compruebe método permitido, pertenencia y espacio autorizado, además de la habilitación del producto. Las reglas locales de autenticación administrada se aplican antes de cargar credenciales y obtener la política de la nube. Pueden restringir:

  • allowed_login_methods: ChatGPT, API o ambos.
  • allowed_chatgpt_workspaces: los espacios en los que se permite entrar.
  • cli_auth_credentials_store y chatgpt_base_url: almacenamiento y servidor de autenticación.

Si no hay un espacio permitido que coincida, el login con ChatGPT no está disponible. La autenticación API solo sigue siendo una opción si la política la permite; si no queda ningún método, el cliente no arranca. Borrar la caché no modifica estas reglas y los ajustes personales no pueden saltárselas.

La prueba útil tras una corrección administrativa es entrar en el espacio que estaba previsto, desde el entorno afectado, y completar una tarea autorizada allí. Que una cuenta personal distinta funcione no confirma que se haya recuperado el acceso de la organización.

Si el bloqueo está en la conexión o en los certificados

Una página corporativa de bloqueo, un identificador de su pasarela o registros de red correlacionados justifican acudir al responsable de esa red. Entrégale la hora, el host del proceso, el dominio de destino sin parámetros secretos y el identificador saneado. Pídele comprobar que la ruta de autenticación está permitida. No cambies a una red alternativa si la política exige la conexión corporativa.

La devolución al proceso local y el intercambio saliente son conexiones distintas. La primera debe alcanzar el proceso que escucha en la máquina de Codex; la segunda necesita acceso al servicio de autenticación. Modificar NO_PROXY para todos los dominios de OpenAI puede romper una salida que debía pasar por la pasarela. Ajusta las excepciones de bucle local solamente conforme a la política de red y al entorno real.

Si hay un error de cadena de certificados y tu empresa inspecciona TLS, la documentación de CA personalizadas permite indicar un archivo PEM aprobado:

bash
# Sustituye la ruta por el PEM entregado por tu organización.
export CODEX_CA_CERTIFICATE="/ruta/al/certificado-corporativo.pem"
codex login

Cuando CODEX_CA_CERTIFICATE no está definida, Codex recurre a SSL_CERT_FILE. Estos ajustes se usan para login, HTTPS y WebSocket seguro. No desactives la verificación TLS ni descargues una raíz desconocida para completar el intento.

Si se corrige el error TLS pero queda un 403, vuelve a interpretar esa nueva respuesta: el certificado ya no explica por sí solo la denegación. Un HTTP 403 recibido y un handshake que no llega a completarse no son la misma señal.

Puedes consultar OpenAI Status para buscar una incidencia que coincida con la hora y el servicio. No afirmamos que el servicio esté operativo en este momento; un panel sin incidencia tampoco acredita los permisos de tu cuenta o el funcionamiento de tu conexión.

Si el navegador no vuelve a la máquina de Codex

Para un entorno remoto o sin navegador, la guía oficial de login headless recomienda el código de dispositivo, todavía identificado como beta. Debe estar habilitado antes en los ajustes de seguridad de una cuenta personal o por el administrador en los permisos del espacio de trabajo.

En la máquina donde quieres usar Codex:

bash
codex login --device-auth

Abre el enlace que imprime ese intento en tu navegador, inicia sesión e introduce su código de un solo uso. Usa únicamente un código generado por un login que tú hayas iniciado y no lo compartas. Si el método no está habilitado, resuelve ese permiso o elige una alternativa admitida; repetir códigos no lo activa.

El código de dispositivo cambia la forma de autorizar al proceso remoto; no elimina una denegación de país, cuenta o política en el intercambio saliente. Si reaparece el mismo 403 con una razón explícita, vuelve a esa razón y detén esta rama. Si el código de dispositivo no está permitido y necesitas configurar un inicio con navegador en una máquina remota, sigue las alternativas de la guía oficial enlazada: es un problema de acceso remoto distinto del rechazo que ya devolvió el intercambio.

Cuándo renovar la sesión y qué hacer con la caché

Si ya has descartado una denegación explícita y necesitas rehacer una sesión almacenada, utiliza los comandos oficiales en el mismo entorno:

bash
codex logout
codex login

Hazlo cuando puedas volver a autenticarte por un método permitido. La guía de autenticación indica que CLI y extensión comparten las credenciales guardadas: cerrar sesión en una obliga a entrar de nuevo en ambas. Con identidad de carga de trabajo seleccionada por el entorno del proceso, Codex rechaza login y logout; en ese caso corresponde revisar esa identidad con su responsable, no restablecer una sesión personal.

No presupongas que todo está en ~/.codex/auth.json. El modo de almacenamiento cambia la ubicación y duración:

ModoDónde quedan las credencialesImplicación para el diagnóstico
fileauth.json dentro de CODEX_HOME, por defecto ~/.codexUn CODEX_HOME diferente puede apuntar a otra caché
keyringAlmacén del sistema operativoBorrar un auth.json no borra esas credenciales
autoAlmacén del sistema si está disponible; archivo como alternativaNo deduzcas la ubicación solo por el nombre del modo
ephemeralMemoria del procesoNo esperes una sesión persistente tras terminar ese proceso

No borres el directorio completo: incluye más estado que la autenticación. Tampoco copies el archivo de otra persona. OpenAI documenta trasladar tu propia caché a una máquina headless como alternativa, pero solo si existe el archivo, el destino es de confianza y el traslado está permitido. No sirve como receta para un keyring sin archivo ni para corregir una denegación administrativa. Para ese caso usa las condiciones de la alternativa oficial de copia, sin publicar ni adjuntar la caché.

Comprueba que se recuperó el acceso que querías

Opciones de recuperación de Codex según conexión, devolución del navegador, cuenta y credenciales

Después de cambiar una condición concreta, verifica tres resultados:

  1. El flujo termina en la máquina afectada, sin el mismo fallo de intercambio.
  2. codex login status y, si corresponde, la cuenta de la aplicación o extensión muestran el método y espacio esperados.
  3. Una tarea breve responde desde esa misma configuración. Por ejemplo: «Responde únicamente AUTH_OK. No uses herramientas ni leas archivos».

Ejecuta esa tarea solo si tienes permiso para consumir el uso del plan o de la API, desde un entorno sin datos sensibles. El texto recibido demuestra esa operación pequeña; no prueba todas las funciones, herramientas o permisos del proyecto.

Si para hacerla funcionar cambiaste de ChatGPT a una API key, has validado otro método, no reparado el intercambio original. La autenticación oficial separa la facturación de API en OpenAI Platform del uso incluido con ChatGPT, y Codex cloud requiere ChatGPT. Si quieres tomar esa decisión por sus funciones y coste, consulta Codex con API key o suscripción, comprobando las condiciones actuales antes de gastar.

Si el login termina y el 403 procede de una pasarela personalizada al ejecutar la tarea, revisa emisor de credencial, proveedor y URL con la guía de configuración de proveedores en Codex. Ese rechazo posterior tiene otro destinatario y no demuestra que OAuth siga fallando.

Los comandos de autenticación de esta guía se apoyan en la documentación oficial consultada el 5 de octubre de 2026. Hemos comprobado sin red la sintaxis y la salida del inventario de variables con valores ficticios; no hemos completado un login real ni una petición de modelo para atribuir una tasa de éxito o un tiempo de recuperación.

Qué enviar a soporte si vuelve el mismo 403

Una denegación explícita de cuenta, país o espacio debe pasar a su responsable. Si, después de corregir una condición justificada, el intento autorizado produce el mismo error, evita una cadena de cambios sin diagnóstico y envía:

  • Hora y zona horaria, versión de Codex, sistema y entorno donde corre.
  • Método y espacio de trabajo previstos, sin credenciales ni identificadores privados innecesarios.
  • Error y fragmento de respuesta saneados, con request ID o identificador del bloqueo si existe.
  • Si llegó la devolución del navegador, qué conexión estaba usando el proceso y qué único cambio se probó.
  • Si el flujo terminó, el resultado de la tarea breve en la misma configuración.

Para una política corporativa, acude al administrador o al responsable de red. Para un rechazo de la cuenta en el servicio oficial, usa el centro de ayuda de OpenAI. No incluyas la dirección completa de retorno, códigos de dispositivo, claves, cookies, tokens ni el contenido de auth.json.

Preguntas frecuentes

¿Por qué el navegador dice que todo salió bien y Codex devuelve 403?

La autorización en el navegador y el intercambio que realiza Codex son pasos distintos. Si el error confirma un 403 del intercambio, comprueba la respuesta de esa petición y el entorno de Codex. Si la CLI solo sigue esperando y no recibió la devolución local, revisa primero la conexión entre navegador y proceso.

¿Device auth corrige cualquier Token exchange failed?

No. Según la guía oficial, es una alternativa para entornos sin navegador o con problemas de devolución local, y debe estar habilitada en la cuenta o el espacio. Una denegación de acceso puede mantenerse después de cambiar ese flujo.

¿Puedo dar el problema por resuelto si codex login status devuelve 0?

No todavía: la referencia del comando define ese resultado como presencia de credenciales. Confirma también el método previsto y una tarea pequeña desde el entorno que fallaba, con autorización para consumir uso.

¿Tengo que cambiar el proxy si el error nombra un país no admitido?

No uses un cambio de proxy para eludir esa condición. Detén los intentos, comprueba la información oficial de disponibilidad y pide a soporte revisar la clasificación si crees que es incorrecta. El texto unsupported_country_region_territory no permite deducir por sí solo que el proxy esté roto.

Fuentes8

Páginas externas que cita esta guía, en el orden en que aparecen. Última actualización: 6 oct 2026.

  1. 1.significado de HTTP 403rfc-editor.org/rfc/rfc9110.html
  2. 2.documentación oficial de autenticaciónlearn.chatgpt.com/docs/auth
  3. 3.referencia de codex loginlearn.chatgpt.com/docs/developer-commands
  4. 4.lista oficial de cambioslearn.chatgpt.com/docs/changelog
  5. 5.lista oficial vigente de países admitidos para ChatGPThelp.openai.com/en/articles/7947663-chatgpt-supported-countries
  6. 6.centro de ayuda de OpenAIhelp.openai.com
  7. 7.reglas locales de autenticación administradalearn.chatgpt.com/docs/enterprise/managed-configuration
  8. 8.OpenAI Statusstatus.openai.com
Esquema de Codex /goal con comprobaciones de disponibilidad y finalización
Herramientas y agentes

Codex /goal: cómo activarlo, usarlo y comprobar el resultado

Con /goal puedes mantener un objetivo en el chat de Codex mientras el trabajo avanza entre turnos. Si no aparece, comprueba la versión y activa features.goals; después define una prueba que permita distinguir una tarea terminada de una ejecución detenida.

9 min