Skip to content

401/Fallo de autenticación: Primero verifica auth_mode, luego verifica Header

Qué podrás hacer después de aprender

  • Determinar en 3 minutos si un 401 está siendo bloqueado por el middleware de autenticación de Antigravity Tools
  • Entender el "valor efectivo real" de los cuatro modos de proxy.auth_mode (especialmente auto) en tu configuración actual
  • Hacer que las solicitudes pasen usando el Header de API Key correcto (y evitar la trampa de prioridad de Headers)

Tu situación actual

Al llamar al proxy inverso local, el cliente recibe un error 401 Unauthorized:

  • Python/OpenAI SDK: lanza AuthenticationError
  • curl: devuelve HTTP/1.1 401 Unauthorized
  • Clientes HTTP: código de estado 401 en la respuesta

¿Qué es 401/fallo de autenticación?

401 Unauthorized en Antigravity Tools comúnmente significa: el proxy habilitó la autenticación (determinado por proxy.auth_mode), pero la solicitud no tiene la API Key correcta, o lleva un Header con mayor prioridad que no coincide, por lo que auth_middleware() devuelve 401 directamente.

Primero confirma si "es el proxy bloqueando"

Las plataformas upstream también pueden devolver 401, pero este FAQ solo trata "401 causado por autenticación del proxy". Puedes usar /healthz a continuación para diferenciar rápidamente.

Solución rápida (haz esto en este orden)

Paso 1: Usa /healthz para determinar "si la autenticación te está bloqueando"

Por quéall_except_health permitirá /healthz, pero bloqueará otras rutas; esto te ayuda a localizar rápidamente si el 401 proviene de la capa de autenticación del proxy.

bash
 # Sin ningún Header de autenticación
curl -i http://127.0.0.1:8045/healthz

Deberías ver

  • Con auth_mode=all_except_health (o auto con allow_lan_access=true): generalmente devuelve 200
  • Con auth_mode=strict: devuelve 401

/healthz en la capa de ruta es GET

El proxy registra GET /healthz en la ruta (ver src-tauri/src/proxy/server.rs).


Paso 2: Confirma el "valor efectivo real" de auth_mode (especialmente auto)

Por quéauto no es una "estrategia independiente", calcula el modo real a ejecutar basándose en allow_lan_access.

proxy.auth_modeCondición adicionalValor efectivo real (effective mode)
off-off
strict-strict
all_except_health-all_except_health
autoallow_lan_access=falseoff
autoallow_lan_access=trueall_except_health

Puedes verificar esto en la página API Proxy del GUI: Allow LAN Access y Auth Mode.


Paso 3: Confirma que api_key no esté vacío y que estás usando el mismo valor

Por qué Cuando la autenticación está habilitada, si proxy.api_key está vacío, auth_middleware() rechazará directamente todas las solicitudes y registrará un error en el log.

text
Proxy auth is enabled but api_key is empty; denying request

Deberías ver

  • En la página API Proxy puedes ver una key que comienza con sk- (el valor predeterminado se genera automáticamente en ProxyConfig::default())
  • Después de hacer clic en "Regenerate/Editar" y guardar, las solicitudes externas se verifican inmediatamente con la nueva key (no es necesario reiniciar)

Paso 4: Prueba con el Header más simple primero (no uses SDKs complejos todavía)

Por qué El middleware lee primero Authorization, luego x-api-key, y finalmente x-goog-api-key. Si envías múltiples Headers a la vez y el primero es incorrecto, aunque el segundo sea correcto no se usará.

bash
 # Recomendado: Authorization + Bearer
curl -i http://127.0.0.1:8045/v1/models \
  -H "Authorization: Bearer sk-REPLACE_WITH_YOUR_PROXY_API_KEY"

Deberías ver: HTTP/1.1 200 OK (o al menos ya no es 401)

Detalles de compatibilidad del proxy con Authorization

auth_middleware() extraerá el valor de Authorization una vez eliminando el prefijo Bearer ; si no hay prefijo Bearer , también usará el valor completo como key para comparación. La documentación aún recomienda Authorization: Bearer <key> (más conforme a las convenciones de SDK generales).

Si debes usar x-api-key:

bash
curl -i http://127.0.0.1:8045/v1/models \
  -H "x-api-key: sk-REPLACE_WITH_YOUR_PROXY_API_KEY"

Problemas comunes (todos ocurren realmente en el código fuente)

FenómenoCausa realQué deberías cambiar
auth_mode=auto, pero las llamadas locales siguen siendo 401allow_lan_access=true hace que auto se comporte como all_except_healthDeshabilita allow_lan_access, o haz que el cliente lleve la key
Crees "ya llevé x-api-key", pero sigue siendo 401Simultáneamente llevaste un Authorization no coincidente, el middleware lo usa primeroElimina Headers extra, mantén solo uno que sepas que es correcto
Authorization: Bearer<key> sigue siendo 401Falta un espacio después de Bearer, no se puede eliminar el prefijo Bearer Cámbialo a Authorization: Bearer <key>
Todas las solicitudes son 401, el log muestra api_key is emptyproxy.api_key está vacíoRegenera/configura una key no vacía en el GUI

Resumen de esta lección

  • Primero usa /healthz para localizar si el 401 proviene de la capa de autenticación del proxy
  • Luego confirma auth_mode (especialmente el modo efectivo de auto)
  • Finalmente lleva solo un Header que sepas que es correcto para verificar (evita la trampa de prioridad de Headers)

Próxima lección

En la próxima lección aprenderemos 429/Error de capacidad: Expectativas correctas de rotación de cuentas y误解s de agotamiento de capacidad del modelo.

Aprenderás:

  • Si 429 es "cuota insuficiente" o "limitación upstream"
  • Expectativas correctas de rotación de cuentas (cuándo cambia automáticamente, cuándo no)
  • Usar configuración para reducir la probabilidad de 429

Apéndice: Referencias de código fuente

Haz clic para expandir y ver ubicaciones del código fuente

Actualizado: 2026-01-23

FunciónRuta de archivoLínea
Enumeración ProxyAuthModesrc-tauri/src/proxy/config.rs5-18
ProxyConfig: allow_lan_access/auth_mode/api_key y valores predeterminadossrc-tauri/src/proxy/config.rs174-258
Análisis del modo auto (effective_auth_mode)src-tauri/src/proxy/security.rs1-30
Middleware de autenticación (extracción y prioridad de Headers, excepción /healthz, permiso OPTIONS)src-tauri/src/proxy/middleware/auth.rs14-77
Registro de ruta /healthz y orden de middlewaresrc-tauri/src/proxy/server.rs170-193
Documentación de autenticación (modos y convenciones de cliente)docs/proxy/auth.md1-45

Enumeraciones clave:

  • ProxyAuthMode::{Off, Strict, AllExceptHealth, Auto}: modos de autenticación

Funciones clave:

  • ProxySecurityConfig::effective_auth_mode(): analiza auto en una estrategia real
  • auth_middleware(): ejecuta autenticación (incluye orden de extracción de Headers y excepción /healthz)