Variables de entorno
Variables de entorno
Section titled “Variables de entorno”Esta pagina lista variables observadas en codigo y variables esperadas por el contrato actual de autenticacion basada en cookies. No copies valores desde .env.local ni desde .env.example sin revision: el backend incluye ejemplos con valores concretos historicos que deben tratarse como no aptos para produccion.
Usa placeholders:
<dominio><api-domain><frontend-origin><secret-manager-path><db-host><smtp-host>Variables criticas para autenticacion por cookies
Section titled “Variables criticas para autenticacion por cookies”Si solo necesitas revisar lo critico antes de la validacion production-like, empieza por estas variables.
Backend:
NODE_ENV=productionAUTH_COOKIE_MODE=d2BROWSER_AUTH_TRANSPORT=cookieREQUIRE_ACTIVE_SESSION=trueAUTH_COOKIE_ACCESS_NAME=__Host-medsync_atAUTH_COOKIE_REFRESH_NAME=__Host-medsync_rtAUTH_CSRF_COOKIE_NAME=__Host-medsync_csrfAUTH_COOKIE_SECURE=trueAUTH_COOKIE_SAMESITE=laxAUTH_COOKIE_DOMAIN=AUTH_COOKIE_PATH=/AUTH_COOKIE_MAX_AGE_MODE=sessionCSRF_ENABLED=trueCORS_CREDENTIALS=trueCORS_ALLOWED_ORIGINS=https://app.<dominio>CSRF_ALLOWED_ORIGINS=https://app.<dominio>Frontend:
VUE_APP_AUTH_COOKIE_MODE=d2VUE_APP_BROWSER_AUTH_TRANSPORT=cookieVUE_APP_CSRF_ENABLED=trueVUE_APP_CORE_URL_API=https://api.<dominio>/Nota: el valor literal d2 es el nombre tecnico que usa el codigo para activar autenticacion por cookies. No representa una etapa de trabajo interna ni una instruccion de planificacion.
Variables locales de desarrollo
Section titled “Variables locales de desarrollo”El modo local normal usa D2 por default con HTTP. Estos valores son solo para desarrollo y no sustituyen la validacion production-like con HTTPS:
# Backend localAUTH_COOKIE_MODE=d2BROWSER_AUTH_TRANSPORT=cookieAUTH_COOKIE_ACCESS_NAME=medsync_at_devAUTH_COOKIE_REFRESH_NAME=medsync_rt_devAUTH_CSRF_COOKIE_NAME=medsync_csrf_devAUTH_COOKIE_SECURE=falseAUTH_COOKIE_SAMESITE=laxAUTH_COOKIE_DOMAIN=AUTH_COOKIE_PATH=/AUTH_COOKIE_MAX_AGE_MODE=sessionCSRF_ENABLED=trueCORS_CREDENTIALS=trueCORS_ALLOWED_ORIGINS=http://localhost:8080,http://127.0.0.1:8080,http://localhost:8081,http://127.0.0.1:8081,http://localhost:8082,http://127.0.0.1:8082,http://localhost:8098,http://127.0.0.1:8098CSRF_ALLOWED_ORIGINS=http://localhost:8080,http://127.0.0.1:8080,http://localhost:8081,http://127.0.0.1:8081,http://localhost:8082,http://127.0.0.1:8082,http://localhost:8098,http://127.0.0.1:8098
# Frontend localVUE_APP_AUTH_COOKIE_MODE=d2VUE_APP_BROWSER_AUTH_TRANSPORT=cookieVUE_APP_CSRF_ENABLED=trueVUE_APP_CORE_URL_API=http://127.0.0.1:3009/Secretos:
JWT_SECRET;REFRESH_TOKEN_SECRET;CSRF_TOKEN_SECRET;PASSWORD_RESET_CODE_SECRET;DB_PASSWORD;- credencial SMTP;
- credenciales storage si aplica.
Estos valores deben venir de secret manager o mecanismo seguro equivalente. No los copies desde .env.local, no los pegues en reportes y no los imprimas en logs.
Backend: core/runtime
Section titled “Backend: core/runtime”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
NODE_ENV | Si | production | Entorno Node. | Puede no activar validaciones production-like si queda en dev. | src/config/security.js |
APP_ENV | Recomendado | production | Entorno de app; se evalua antes que NODE_ENV. | Ambiguedad de controles de startup. | src/config/security.js |
ENVIRONMENT | Recomendado | production | Alias de entorno. | Misma ambiguedad que APP_ENV. | src/config/security.js |
PORT | Si | 3009 o puerto interno | Puerto del backend. | API inaccesible o conflicto de puerto. | src/index.js, src/config/config.js |
SERVER | No confirmado | <server-name> | Campo heredado de config. | Sin impacto confirmado en autenticacion por cookies. | src/config/config.js |
EXPRESS_TRUST_PROXY | Si detras de proxy | 1 o subnet permitida | Permite confiar en headers proxy seguros. | IP/proto incorrectos; spoofing si es amplio. | src/index.js |
SQL_LOGGING | No en produccion | false | Habilita logging SQL si true. | Puede exponer datos sensibles en logs. | src/db/Sequelize.connection.js |
Backend: base de datos
Section titled “Backend: base de datos”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
DB_HOST | Si | <db-host> | Host MySQL. | Conexion fallida o fuga a DB equivocada. | src/config/config.js |
DB_PORT | Si | 3306 | Puerto MySQL. | Conexion fallida. | src/config/config.js |
DB_NAME | Si | medsync_prod | Base de datos. | Usar QA/dev por error o destruir datos. | src/db/Sequelize.connection.js |
DB_USER | Si | medsync_app | Usuario DB de aplicacion. | Privilegios excesivos o fallo auth. | src/config/config.js |
DB_PASSWORD | Si | <secret-manager-path>/db-password | Password DB. | Compromiso total de datos. | src/config/config.js |
Backend: JWT, sesiones y refresh
Section titled “Backend: JWT, sesiones y refresh”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
JWT_SECRET | Si | <secret-manager-path>/jwt-secret | Firma access JWT. | Tokens falsificables si es debil/default. | src/config/security.js, src/config/jwt.js |
JWT_EXPIRES_IN | Si | 3600 o 15m segun politica | Vigencia del access token. | Sesiones demasiado largas o expiracion inesperada. | src/config/security.js |
SESSION_SECRET | Si si se usa session middleware | <secret-manager-path>/session-secret | Se conserva en config heredada. | Riesgo si se activa session middleware con default. | src/config/config.js |
REQUIRE_ACTIVE_SESSION | Si | true | Valida id_login + id_session contra DB en requests protegidos. | Logout/Super Admin close no invalida access hasta expirar. | src/middleware/awaitHandlerFactory.middleware.js |
REFRESH_TOKEN_SECRET | Si | <secret-manager-path>/refresh-token-secret | HMAC de refresh token v2. | Refresh tokens falsificables o validacion debil. | src/services/security/refreshToken.service.js |
REFRESH_TOKEN_TTL_HOURS | Segun politica | 12 | TTL refresh por horas. | TTL excesivo o invalido. | src/config/security.js |
REFRESH_TOKEN_TTL_DAYS | Segun politica | 30 | TTL refresh por dias; default si no hay horas. | Ventana de abuso larga. | src/config/security.js |
REFRESH_TOKEN_ROTATION_ENABLED | Si | true o omitido | Si es false, startup production-like falla. | Reuso de refresh mas riesgoso. | src/config/security.js |
REFRESH_TOKEN_REUSE_REVOKE_SCOPE | Recomendado | session, family o user | Alcance de revocacion ante reuse. | Respuesta a compromiso demasiado estrecha. | src/config/security.js |
SUPER_ADMIN_SESSION_REAUTH_REQUIRED | Decision producto | true para mayor seguridad | Reautenticacion de acciones sensibles si se implementa. | Acciones admin sin friccion adicional. | src/config/security.js |
Backend: cookies de autenticacion
Section titled “Backend: cookies de autenticacion”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
AUTH_COOKIE_MODE | Si para autenticacion por cookies | d2 | Habilita modo cookie auth cuando el transporte tambien es cookie. El valor d2 es un literal interno de configuracion. | Quedar en legacy mantiene contrato navegador inseguro como destino final. | src/config/authCookie.config.js |
BROWSER_AUTH_TRANSPORT | Si para autenticacion por cookies | cookie | Indica que navegador usa cookies en vez de Authorization. | El modo de cookies no se activa si queda authorization. | src/config/authCookie.config.js |
AUTH_COOKIE_ACCESS_NAME | Si | __Host-medsync_at | Nombre cookie access. | Cookies no limpiadas si cambia sin control. | src/config/authCookie.config.js |
AUTH_COOKIE_REFRESH_NAME | Si | __Host-medsync_rt | Nombre cookie refresh. | Refresh roto o cookie residual. | src/config/authCookie.config.js |
AUTH_CSRF_COOKIE_NAME | Si | __Host-medsync_csrf | Nombre cookie CSRF usada por el navegador. | Frontend/backend no coinciden. | src/config/authCookie.config.js |
CSRF_COOKIE_NAME | Alias opcional | __Host-medsync_csrf | Alias soportado por config. | Confusion si se usan ambos con valores distintos. | src/config/authCookie.config.js |
AUTH_COOKIE_SECURE | Si | true | Agrega Secure. | Cookies auth por HTTP; invalido production-like. | src/config/authCookie.config.js |
AUTH_COOKIE_SAMESITE | Si | lax | lax, strict o none. | CSRF/cross-site mal modelado. | src/config/authCookie.config.js |
AUTH_COOKIE_DOMAIN | Normalmente vacio | vacio | No usar con __Host-. | Rompe reglas __Host-; amplia alcance de cookie. | src/config/authCookie.config.js |
AUTH_COOKIE_PATH | Si | / | Path de cookies. | Clear-cookie puede fallar si no coincide. | src/config/authCookie.config.js |
AUTH_COOKIE_MAX_AGE_MODE | Si | session | session o ttl. | Persistencia de cookies no aprobada. | src/config/authCookie.config.js |
Backend: CSRF
Section titled “Backend: CSRF”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
CSRF_ENABLED | Si con cookies auth | true | Activa double-submit CSRF. | Mutaciones autenticadas por cookie expuestas a CSRF. | src/middleware/csrf.middleware.js |
CSRF_TOKEN_SECRET | Si | <secret-manager-path>/csrf-secret | Firma HMAC de token CSRF. | Tokens falsificables si es debil. | src/services/security/csrfToken.service.js |
CSRF_HEADER_NAME | Si | X-CSRF-Token | Header esperado. | Frontend no puede pasar validacion. | src/config/security.js |
CSRF_TOKEN_TTL_SECONDS | Recomendado | 900 | TTL de token CSRF. | Tokens demasiado largos o expiracion agresiva. | src/config/security.js |
CSRF_ORIGIN_CHECK_ENABLED | Si | true | Valida Origin/Referer. | Defensa adicional ausente. | src/services/security/csrfToken.service.js |
CSRF_ALLOWED_ORIGINS | Si production-like | https://app.<dominio> | Allowlist de origenes web. | Origen legitimo bloqueado o atacante permitido. | src/config/security.js |
Backend: CORS
Section titled “Backend: CORS”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
CORS_CREDENTIALS | Si con cookies auth | true | Permite cookies cross-origin same-site/subdominio. | Cookies no viajan o wildcard inseguro. | src/middleware/corsCredentialed.middleware.js |
CORS_ALLOWED_ORIGINS | Si | https://app.<dominio> | Allowlist exacta. | Wildcard con credentials falla o expone API. | src/config/security.js |
CORS_ORIGIN | Fallback legacy | https://app.<dominio> | Fallback si no existe CORS_ALLOWED_ORIGINS. | Ambiguedad; preferir variable nueva. | src/config/security.js |
CORS_ALLOWED_HEADERS | Si se customiza | Content-Type,Accept,X-CSRF-Token,X-Requested-With | Headers permitidos en preflight. | Mutaciones con cookies fallan si falta CSRF. | src/config/security.js |
CORS_ALLOWED_METHODS | Si se customiza | GET,POST,PUT,PATCH,DELETE,OPTIONS | Metodos permitidos. | Preflight incorrecto. | src/config/security.js |
CORS_MAX_AGE_SECONDS | Opcional | 600 | Cache de preflight. | Valor invalido falla production-like. | src/config/security.js |
Backend: forgot password y rate limit
Section titled “Backend: forgot password y rate limit”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
PASSWORD_RESET_CODE_SECRET | Si | <secret-manager-path>/password-reset-secret | HMAC de codigos reset. | Reset falsificable si debil. | src/config/security.js |
PASSWORD_RESET_CODE_TTL_MINUTES | Si | 10 | TTL del codigo. | Ventana excesiva o expiracion prematura. | src/config/security.js |
PASSWORD_RESET_CODE_LENGTH | Si | 6 | Longitud de codigo. | Codigo facil o UX rota. | src/config/security.js |
PASSWORD_RESET_MAX_ATTEMPTS | Si | 5 | Intentos por challenge. | Fuerza bruta de OTP. | src/config/security.js |
PASSWORD_RESET_REVOKE_PREVIOUS | Si | true | Invalida challenges anteriores. | Codigos antiguos quedan activos. | src/config/security.js |
PASSWORD_RESET_CODE_ALPHABET | Si | numeric | Alfabeto del codigo. | UX/seguridad no acordada. | src/config/security.js |
AUTH_RATE_LIMIT_WINDOW_MS | Recomendado | 900000 | Ventana rate limit auth. | Ataques de fuerza bruta. | src/middleware/authRateLimit.middleware.js |
AUTH_LOCKOUT_MS | Recomendado | 900000 | Bloqueo temporal. | Password spraying mas facil. | src/middleware/authRateLimit.middleware.js |
AUTH_LOGIN_IP_LIMIT | Recomendado | 20 | Limite por IP para login. | Fuerza bruta. | src/middleware/authRateLimit.middleware.js |
AUTH_LOGIN_PHONE_FAILED_LIMIT | Recomendado | 5 | Limite por identidad. | Ataques a una cuenta. | src/middleware/authRateLimit.middleware.js |
Backend: SMTP y correo
Section titled “Backend: SMTP y correo”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
EMAIL_PROVIDER | Si | smtp | Provider usado por email service. | Flujo reset/firma sin correo. | src/services/email/email.service.js |
SMTP_HOST | Si | <smtp-host> | Host SMTP. | Correos no salen. | src/services/email/providers/nodemailer.provider.js |
SMTP_PORT | Si | 587 | Puerto SMTP. | Conexion fallida. | src/services/email/providers/nodemailer.provider.js |
SMTP_SECURE | Si | true o false segun puerto | TLS directo si aplica. | Envio inseguro o fallo TLS. | src/services/email/providers/nodemailer.provider.js |
SMTP_USER | Si | <smtp-user> | Usuario SMTP. | Envio fallido o credencial expuesta. | src/services/email/providers/nodemailer.provider.js |
SMTP_PASSWORD | Si | <secret-manager-path>/smtp-password | Password SMTP. | Compromiso de correo. | src/services/email/providers/nodemailer.provider.js |
SMTP_PASS | Alias | <secret-manager-path>/smtp-password | Alias aceptado por provider. | Confusion si diverge de SMTP_PASSWORD. | src/services/email/providers/nodemailer.provider.js |
EMAIL_FROM | Si | MedSync <no-reply@<dominio>> | Remitente. | Correos rechazados o phishing. | src/services/email/providers/nodemailer.provider.js |
SMTP_FROM | Pendiente/no usado | No usar; usar EMAIL_FROM | Nombre sugerido previamente, no observado en codigo. | Configurar variable sin efecto. | N/A |
EMAIL_REPLY_TO | Opcional | soporte@<dominio> | Reply-To. | Respuestas perdidas. | src/services/email/providers/nodemailer.provider.js |
MAIL_USER, MAIL_PASSWORD, MAIL_SERVICE | Legacy | evitar para nuevas configs | Config heredada Gmail. | Confusion de proveedor. | src/config/config.js |
Backend: storage y public links
Section titled “Backend: storage y public links”| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
AWS_REGION | Si si usa S3 | us-east-1 | Region AWS. | Storage fallido. | src/config/config.js |
AWS_ACCESS_KEY_ID | Si si usa S3 | <secret-manager-path>/aws-key | Access key. | Acceso no autorizado a buckets. | src/config/config.js |
AWS_SECRET_ACCESS_KEY | Si si usa S3 | <secret-manager-path>/aws-secret | Secret key. | Compromiso de storage. | src/config/config.js |
AWS_BUCKET_FIRMAS, AWS_BUCKET_PHOTOS, AWS_BUCKET_XRAY, AWS_BUCKET_PROFILE, AWS_BUCKET_CONFIG_FIRMS | Segun modulos | <bucket-name> | Buckets por tipo de archivo. | Datos clinicos en bucket equivocado. | src/config/config.js |
CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET | Si aplica | <secret-manager-path>/cloudinary-* | Integracion Cloudinary. | Exposicion de assets/credenciales. | src/config/config.js |
PUBLIC_APP_URL | Si firma publica | https://app.<dominio> | Base de links publicos. | Links rotos o host incorrecto. | src/services/documentSignature/documentSignatureToken.service.js |
SIGNATURE_LINK_TOKEN_SECRET | Si firma publica | <secret-manager-path>/signature-secret | Firma tokens publicos. | Links falsificables. | src/services/documentSignature/documentSignatureToken.service.js |
SIGNATURE_LINK_QR_TTL_MINUTES, SIGNATURE_LINK_DEFAULT_TTL_HOURS, SIGNATURE_LINK_MAX_TTL_HOURS | Si firma publica | 15, 72, 168 | TTL links/QR. | Links vivos demasiado tiempo. | src/services/documentSignature/documentSignatureToken.service.js |
MAX_IMAGE_UPLOAD_BYTES | Recomendado | 5242880 | Limite de upload imagen. | Abuso de almacenamiento/memoria. | src/util/file/file.js |
Frontend env vars
Section titled “Frontend env vars”El frontend usa Vue CLI; las variables se leen en build time. Cambiar env requiere recompilar.
| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
NODE_ENV | Si | production | Modo build. | Build no optimizado. | Vue CLI |
VUE_APP_CORE_URL_API | Si | https://api.<dominio>/ | Base URL API real observada. | Frontend llama API equivocada. | src/services/config/axios.url.js |
VUE_APP_API_URL | No observado | No usar salvo refactor | Nombre sugerido, pero el codigo usa VUE_APP_CORE_URL_API. | Variable sin efecto si se configura sola. | N/A |
VUE_APP_SECRET_KEY | Heredado | <non-secret-placeholder> | Se envia en payload legacy login; no tratar como secreto real porque vive en bundle. | Falsa sensacion de seguridad si se usa como secreto. | src/store/modules/auth/actions.js |
VUE_APP_AUTH_COOKIE_MODE | Si para autenticacion por cookies | d2 | Activa la rama de cookie auth del frontend. El valor d2 es un literal interno de configuracion. | Quedar en legacy mantiene Authorization. | src/services/config/authTransport.config.js |
VUE_APP_BROWSER_AUTH_TRANSPORT | Si para autenticacion por cookies | cookie | Navegador usa cookies. | El modo de cookies no se activa. | src/services/config/authTransport.config.js |
VUE_APP_CSRF_ENABLED | Si para autenticacion por cookies | true | Frontend obtiene y envia CSRF. | Mutaciones fallan o quedan inseguras si backend no alinea. | src/services/core/auth/DACsrfService.js |
Build production-like con cookies debe usar:
VUE_APP_AUTH_COOKIE_MODE=d2VUE_APP_BROWSER_AUTH_TRANSPORT=cookieVUE_APP_CSRF_ENABLED=trueVUE_APP_CORE_URL_API=https://api.<dominio>/Docs env vars
Section titled “Docs env vars”medsync-docs no tiene .env ni variables obligatorias observadas. El sitio declara site: 'https://docs.hemia.local' en astro.config.mjs, que debe ajustarse si se publica en https://docs.<dominio>.
| Variable | Requerida en produccion | Ejemplo seguro / placeholder | Descripcion | Riesgo si esta mal configurada | Archivo relacionado |
|---|---|---|---|---|---|
| N/A | No | N/A | No hay env vars docs observadas. | N/A | medsync-docs/package.json |