Files
plantillas-proyectos/frontend/.env.example
Galindo97 74282d446f fix(auth): corregir redirect_uri y KC URL con localhost en producción
- workspace-auth.ts: reemplaza isInternalOnlyHost por isDevOnlyUrl que
  incluye localhost/127.0.0.1 e IPs LAN además de hostnames Docker.
  getWorkspaceBaseUrl() y getPublicKeycloakBaseUrl() ya ignoran valores
  dev-only; no usan VITE_KEYCLOAK_URL=http://localhost:... en prod.

- Nuevo resolveSystemBaseUrl(): cuando url.origin es localhost porque
  ORIGIN env var apunta a localhost en producción, busca SITE_URL/APP_URL
  como fallback para construir redirect_uri seguros.

- buildKeycloakAuthorizationUrl() y buildKeycloakLoginUrl() usan
  resolveSystemBaseUrl() para el redirect_uri (evita localhost:5173).

- auth/callback/+page.server.ts: idem para el redirectUri del token exchange.

- auth.ts (cliente): resolveKeycloakUrl() detecta en runtime si
  VITE_KEYCLOAK_URL bakeado apunta a localhost pero el browser NO está
  en localhost → deriva la URL del hostname real del browser.

- .env.example: documenta vars de producción recomendadas (SITE_URL,
  ORIGIN, VITE_HUB_URL) con advertencias sobre el efecto de ORIGIN.

Root cause: el .env de dev (ORIGIN=http://localhost:5173,
VITE_KEYCLOAK_URL=http://localhost:8085/kcauth) se usaba en producción
sin sobrescribir estas variables, causando que KC generara URLs con
localhost como redirect_uri y KC URL.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 08:49:39 -05:00

40 lines
2.0 KiB
Plaintext

# ─── Copia este archivo a .env y ajusta los valores para dev local ─────────────
# ─── Para PRODUCCIÓN ver el bloque al final de este archivo ──────────────────
# API de Anexo76 (frontend y SSR)
VITE_API_URL=http://localhost:8000/api/
INTERNAL_API_URL=http://localhost:8000/api/
# Hub Workspace
VITE_HUB_URL=http://localhost:3001
HUB_URL=http://localhost:3001
INTERNAL_HUB_URL=http://localhost:8001
# Keycloak — URL pública que el BROWSER usará (se bakea en el build)
VITE_KEYCLOAK_URL=http://localhost:8085/kcauth
VITE_KEYCLOAK_REALM=master
VITE_KEYCLOAK_CLIENT_ID=anexo76-frontend
# Keycloak — URL interna que el SERVIDOR usará (no va al browser)
KEYCLOAK_URL=http://localhost:8085/kcauth
KEYCLOAK_REALM=master
KEYCLOAK_CLIENT_ID=anexo76-frontend
# KEYCLOAK_CLIENT_SECRET= # solo si el cliente KC no es público
# SvelteKit — necesario para cookies secure y URLs SSR correctas.
# ⚠️ En producción DEBE apuntar al dominio público real, no a localhost.
# Si este valor es localhost, url.origin en los load functions será localhost
# y los redirect_uri de Keycloak apuntarán a localhost (bug de login).
ORIGIN=http://localhost:5173
# ─── PRODUCCIÓN: vars adicionales críticas ────────────────────────────────────
# SITE_URL es el fallback de seguridad cuando ORIGIN no se pudo corregir a tiempo.
# El código lo usa para construir redirect_uri cuando url.origin es localhost.
# Recomendado: definir TANTO ORIGIN como SITE_URL con el mismo valor en prod.
#
# SITE_URL=https://anexo76-dev.aduanasoft.com
# ORIGIN=https://anexo76-dev.aduanasoft.com
# VITE_HUB_URL=https://hub-dev.aduanasoft.com (o la URL del Hub en prod)
# HUB_URL=https://hub-dev.aduanasoft.com
# VITE_KEYCLOAK_URL= # vacío → se deriva del hostname del browser automáticamente
# KEYCLOAK_URL=http://keycloak:8080 # URL interna del contenedor KC (si en Docker)