Skip to content
Usuario

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=production
AUTH_COOKIE_MODE=d2
BROWSER_AUTH_TRANSPORT=cookie
REQUIRE_ACTIVE_SESSION=true
AUTH_COOKIE_ACCESS_NAME=__Host-medsync_at
AUTH_COOKIE_REFRESH_NAME=__Host-medsync_rt
AUTH_CSRF_COOKIE_NAME=__Host-medsync_csrf
AUTH_COOKIE_SECURE=true
AUTH_COOKIE_SAMESITE=lax
AUTH_COOKIE_DOMAIN=
AUTH_COOKIE_PATH=/
AUTH_COOKIE_MAX_AGE_MODE=session
CSRF_ENABLED=true
CORS_CREDENTIALS=true
CORS_ALLOWED_ORIGINS=https://app.<dominio>
CSRF_ALLOWED_ORIGINS=https://app.<dominio>

Frontend:

VUE_APP_AUTH_COOKIE_MODE=d2
VUE_APP_BROWSER_AUTH_TRANSPORT=cookie
VUE_APP_CSRF_ENABLED=true
VUE_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.

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 local
AUTH_COOKIE_MODE=d2
BROWSER_AUTH_TRANSPORT=cookie
AUTH_COOKIE_ACCESS_NAME=medsync_at_dev
AUTH_COOKIE_REFRESH_NAME=medsync_rt_dev
AUTH_CSRF_COOKIE_NAME=medsync_csrf_dev
AUTH_COOKIE_SECURE=false
AUTH_COOKIE_SAMESITE=lax
AUTH_COOKIE_DOMAIN=
AUTH_COOKIE_PATH=/
AUTH_COOKIE_MAX_AGE_MODE=session
CSRF_ENABLED=true
CORS_CREDENTIALS=true
CORS_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
CSRF_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 local
VUE_APP_AUTH_COOKIE_MODE=d2
VUE_APP_BROWSER_AUTH_TRANSPORT=cookie
VUE_APP_CSRF_ENABLED=true
VUE_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.

VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
NODE_ENVSiproductionEntorno Node.Puede no activar validaciones production-like si queda en dev.src/config/security.js
APP_ENVRecomendadoproductionEntorno de app; se evalua antes que NODE_ENV.Ambiguedad de controles de startup.src/config/security.js
ENVIRONMENTRecomendadoproductionAlias de entorno.Misma ambiguedad que APP_ENV.src/config/security.js
PORTSi3009 o puerto internoPuerto del backend.API inaccesible o conflicto de puerto.src/index.js, src/config/config.js
SERVERNo confirmado<server-name>Campo heredado de config.Sin impacto confirmado en autenticacion por cookies.src/config/config.js
EXPRESS_TRUST_PROXYSi detras de proxy1 o subnet permitidaPermite confiar en headers proxy seguros.IP/proto incorrectos; spoofing si es amplio.src/index.js
SQL_LOGGINGNo en produccionfalseHabilita logging SQL si true.Puede exponer datos sensibles en logs.src/db/Sequelize.connection.js
VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
DB_HOSTSi<db-host>Host MySQL.Conexion fallida o fuga a DB equivocada.src/config/config.js
DB_PORTSi3306Puerto MySQL.Conexion fallida.src/config/config.js
DB_NAMESimedsync_prodBase de datos.Usar QA/dev por error o destruir datos.src/db/Sequelize.connection.js
DB_USERSimedsync_appUsuario DB de aplicacion.Privilegios excesivos o fallo auth.src/config/config.js
DB_PASSWORDSi<secret-manager-path>/db-passwordPassword DB.Compromiso total de datos.src/config/config.js
VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
JWT_SECRETSi<secret-manager-path>/jwt-secretFirma access JWT.Tokens falsificables si es debil/default.src/config/security.js, src/config/jwt.js
JWT_EXPIRES_INSi3600 o 15m segun politicaVigencia del access token.Sesiones demasiado largas o expiracion inesperada.src/config/security.js
SESSION_SECRETSi si se usa session middleware<secret-manager-path>/session-secretSe conserva en config heredada.Riesgo si se activa session middleware con default.src/config/config.js
REQUIRE_ACTIVE_SESSIONSitrueValida 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_SECRETSi<secret-manager-path>/refresh-token-secretHMAC de refresh token v2.Refresh tokens falsificables o validacion debil.src/services/security/refreshToken.service.js
REFRESH_TOKEN_TTL_HOURSSegun politica12TTL refresh por horas.TTL excesivo o invalido.src/config/security.js
REFRESH_TOKEN_TTL_DAYSSegun politica30TTL refresh por dias; default si no hay horas.Ventana de abuso larga.src/config/security.js
REFRESH_TOKEN_ROTATION_ENABLEDSitrue o omitidoSi es false, startup production-like falla.Reuso de refresh mas riesgoso.src/config/security.js
REFRESH_TOKEN_REUSE_REVOKE_SCOPERecomendadosession, family o userAlcance de revocacion ante reuse.Respuesta a compromiso demasiado estrecha.src/config/security.js
SUPER_ADMIN_SESSION_REAUTH_REQUIREDDecision productotrue para mayor seguridadReautenticacion de acciones sensibles si se implementa.Acciones admin sin friccion adicional.src/config/security.js
VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
AUTH_COOKIE_MODESi para autenticacion por cookiesd2Habilita 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_TRANSPORTSi para autenticacion por cookiescookieIndica 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_NAMESi__Host-medsync_atNombre cookie access.Cookies no limpiadas si cambia sin control.src/config/authCookie.config.js
AUTH_COOKIE_REFRESH_NAMESi__Host-medsync_rtNombre cookie refresh.Refresh roto o cookie residual.src/config/authCookie.config.js
AUTH_CSRF_COOKIE_NAMESi__Host-medsync_csrfNombre cookie CSRF usada por el navegador.Frontend/backend no coinciden.src/config/authCookie.config.js
CSRF_COOKIE_NAMEAlias opcional__Host-medsync_csrfAlias soportado por config.Confusion si se usan ambos con valores distintos.src/config/authCookie.config.js
AUTH_COOKIE_SECURESitrueAgrega Secure.Cookies auth por HTTP; invalido production-like.src/config/authCookie.config.js
AUTH_COOKIE_SAMESITESilaxlax, strict o none.CSRF/cross-site mal modelado.src/config/authCookie.config.js
AUTH_COOKIE_DOMAINNormalmente vaciovacioNo usar con __Host-.Rompe reglas __Host-; amplia alcance de cookie.src/config/authCookie.config.js
AUTH_COOKIE_PATHSi/Path de cookies.Clear-cookie puede fallar si no coincide.src/config/authCookie.config.js
AUTH_COOKIE_MAX_AGE_MODESisessionsession o ttl.Persistencia de cookies no aprobada.src/config/authCookie.config.js
VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
CSRF_ENABLEDSi con cookies authtrueActiva double-submit CSRF.Mutaciones autenticadas por cookie expuestas a CSRF.src/middleware/csrf.middleware.js
CSRF_TOKEN_SECRETSi<secret-manager-path>/csrf-secretFirma HMAC de token CSRF.Tokens falsificables si es debil.src/services/security/csrfToken.service.js
CSRF_HEADER_NAMESiX-CSRF-TokenHeader esperado.Frontend no puede pasar validacion.src/config/security.js
CSRF_TOKEN_TTL_SECONDSRecomendado900TTL de token CSRF.Tokens demasiado largos o expiracion agresiva.src/config/security.js
CSRF_ORIGIN_CHECK_ENABLEDSitrueValida Origin/Referer.Defensa adicional ausente.src/services/security/csrfToken.service.js
CSRF_ALLOWED_ORIGINSSi production-likehttps://app.<dominio>Allowlist de origenes web.Origen legitimo bloqueado o atacante permitido.src/config/security.js
VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
CORS_CREDENTIALSSi con cookies authtruePermite cookies cross-origin same-site/subdominio.Cookies no viajan o wildcard inseguro.src/middleware/corsCredentialed.middleware.js
CORS_ALLOWED_ORIGINSSihttps://app.<dominio>Allowlist exacta.Wildcard con credentials falla o expone API.src/config/security.js
CORS_ORIGINFallback legacyhttps://app.<dominio>Fallback si no existe CORS_ALLOWED_ORIGINS.Ambiguedad; preferir variable nueva.src/config/security.js
CORS_ALLOWED_HEADERSSi se customizaContent-Type,Accept,X-CSRF-Token,X-Requested-WithHeaders permitidos en preflight.Mutaciones con cookies fallan si falta CSRF.src/config/security.js
CORS_ALLOWED_METHODSSi se customizaGET,POST,PUT,PATCH,DELETE,OPTIONSMetodos permitidos.Preflight incorrecto.src/config/security.js
CORS_MAX_AGE_SECONDSOpcional600Cache de preflight.Valor invalido falla production-like.src/config/security.js
VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
PASSWORD_RESET_CODE_SECRETSi<secret-manager-path>/password-reset-secretHMAC de codigos reset.Reset falsificable si debil.src/config/security.js
PASSWORD_RESET_CODE_TTL_MINUTESSi10TTL del codigo.Ventana excesiva o expiracion prematura.src/config/security.js
PASSWORD_RESET_CODE_LENGTHSi6Longitud de codigo.Codigo facil o UX rota.src/config/security.js
PASSWORD_RESET_MAX_ATTEMPTSSi5Intentos por challenge.Fuerza bruta de OTP.src/config/security.js
PASSWORD_RESET_REVOKE_PREVIOUSSitrueInvalida challenges anteriores.Codigos antiguos quedan activos.src/config/security.js
PASSWORD_RESET_CODE_ALPHABETSinumericAlfabeto del codigo.UX/seguridad no acordada.src/config/security.js
AUTH_RATE_LIMIT_WINDOW_MSRecomendado900000Ventana rate limit auth.Ataques de fuerza bruta.src/middleware/authRateLimit.middleware.js
AUTH_LOCKOUT_MSRecomendado900000Bloqueo temporal.Password spraying mas facil.src/middleware/authRateLimit.middleware.js
AUTH_LOGIN_IP_LIMITRecomendado20Limite por IP para login.Fuerza bruta.src/middleware/authRateLimit.middleware.js
AUTH_LOGIN_PHONE_FAILED_LIMITRecomendado5Limite por identidad.Ataques a una cuenta.src/middleware/authRateLimit.middleware.js
VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
EMAIL_PROVIDERSismtpProvider usado por email service.Flujo reset/firma sin correo.src/services/email/email.service.js
SMTP_HOSTSi<smtp-host>Host SMTP.Correos no salen.src/services/email/providers/nodemailer.provider.js
SMTP_PORTSi587Puerto SMTP.Conexion fallida.src/services/email/providers/nodemailer.provider.js
SMTP_SECURESitrue o false segun puertoTLS directo si aplica.Envio inseguro o fallo TLS.src/services/email/providers/nodemailer.provider.js
SMTP_USERSi<smtp-user>Usuario SMTP.Envio fallido o credencial expuesta.src/services/email/providers/nodemailer.provider.js
SMTP_PASSWORDSi<secret-manager-path>/smtp-passwordPassword SMTP.Compromiso de correo.src/services/email/providers/nodemailer.provider.js
SMTP_PASSAlias<secret-manager-path>/smtp-passwordAlias aceptado por provider.Confusion si diverge de SMTP_PASSWORD.src/services/email/providers/nodemailer.provider.js
EMAIL_FROMSiMedSync <no-reply@<dominio>>Remitente.Correos rechazados o phishing.src/services/email/providers/nodemailer.provider.js
SMTP_FROMPendiente/no usadoNo usar; usar EMAIL_FROMNombre sugerido previamente, no observado en codigo.Configurar variable sin efecto.N/A
EMAIL_REPLY_TOOpcionalsoporte@<dominio>Reply-To.Respuestas perdidas.src/services/email/providers/nodemailer.provider.js
MAIL_USER, MAIL_PASSWORD, MAIL_SERVICELegacyevitar para nuevas configsConfig heredada Gmail.Confusion de proveedor.src/config/config.js
VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
AWS_REGIONSi si usa S3us-east-1Region AWS.Storage fallido.src/config/config.js
AWS_ACCESS_KEY_IDSi si usa S3<secret-manager-path>/aws-keyAccess key.Acceso no autorizado a buckets.src/config/config.js
AWS_SECRET_ACCESS_KEYSi si usa S3<secret-manager-path>/aws-secretSecret key.Compromiso de storage.src/config/config.js
AWS_BUCKET_FIRMAS, AWS_BUCKET_PHOTOS, AWS_BUCKET_XRAY, AWS_BUCKET_PROFILE, AWS_BUCKET_CONFIG_FIRMSSegun 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_SECRETSi aplica<secret-manager-path>/cloudinary-*Integracion Cloudinary.Exposicion de assets/credenciales.src/config/config.js
PUBLIC_APP_URLSi firma publicahttps://app.<dominio>Base de links publicos.Links rotos o host incorrecto.src/services/documentSignature/documentSignatureToken.service.js
SIGNATURE_LINK_TOKEN_SECRETSi firma publica<secret-manager-path>/signature-secretFirma tokens publicos.Links falsificables.src/services/documentSignature/documentSignatureToken.service.js
SIGNATURE_LINK_QR_TTL_MINUTES, SIGNATURE_LINK_DEFAULT_TTL_HOURS, SIGNATURE_LINK_MAX_TTL_HOURSSi firma publica15, 72, 168TTL links/QR.Links vivos demasiado tiempo.src/services/documentSignature/documentSignatureToken.service.js
MAX_IMAGE_UPLOAD_BYTESRecomendado5242880Limite de upload imagen.Abuso de almacenamiento/memoria.src/util/file/file.js

El frontend usa Vue CLI; las variables se leen en build time. Cambiar env requiere recompilar.

VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
NODE_ENVSiproductionModo build.Build no optimizado.Vue CLI
VUE_APP_CORE_URL_APISihttps://api.<dominio>/Base URL API real observada.Frontend llama API equivocada.src/services/config/axios.url.js
VUE_APP_API_URLNo observadoNo usar salvo refactorNombre sugerido, pero el codigo usa VUE_APP_CORE_URL_API.Variable sin efecto si se configura sola.N/A
VUE_APP_SECRET_KEYHeredado<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_MODESi para autenticacion por cookiesd2Activa 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_TRANSPORTSi para autenticacion por cookiescookieNavegador usa cookies.El modo de cookies no se activa.src/services/config/authTransport.config.js
VUE_APP_CSRF_ENABLEDSi para autenticacion por cookiestrueFrontend 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=d2
VUE_APP_BROWSER_AUTH_TRANSPORT=cookie
VUE_APP_CSRF_ENABLED=true
VUE_APP_CORE_URL_API=https://api.<dominio>/

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>.

VariableRequerida en produccionEjemplo seguro / placeholderDescripcionRiesgo si esta mal configuradaArchivo relacionado
N/ANoN/ANo hay env vars docs observadas.N/Amedsync-docs/package.json