infra: notas sobre voto mocion

  • Diego solicita verificar este error en la aplicación
  • Primero determinamos el ambiente de producción
# Ver en qué namespaces está desplegado voto-mocion
oc get route --all-namespaces | grep voto-mocion

# Ver los namespaces disponibles
oc get namespaces | grep -iE "prod|staging|stg|main"
  • Obtener los pods
# Ver los pods de producción
oc get pods -n production | grep voto-mocion

# Ver las variables de entorno del pod web de producción
oc exec -n production $(oc get pod -n production -l app=voto-mocion-web -o name | head -1) -- \
  env | grep -iE "SSO|REDIRECT|CALLBACK|CLIENT|BASE_URL|UNAXT"
  • Resultado
cgi@okd-provisioner-nodo01:~$ oc get pods -n production | grep voto-mocion
voto-mocion-api-deploy-7d99f9d9-68t7k                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-6v86t                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-7nd5l                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-7ngss                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-8d7sf                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-9htgx                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-flbrg                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-frmnm                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-g7gzp                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-gx8hb                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-hpk8z                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-jd94p                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-jxz5l                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-kbmhv                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-ngf5d                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-nh6sq                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-nzfh8                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-rgrpm                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-rk6jk                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-vtvkl                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-xlnm9                  1/1     Running   0             27h
voto-mocion-api-deploy-7d99f9d9-zrn4k                  1/1     Running   0             27h
voto-mocion-web-deploy-75fb5c9759-49jx2                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-4xsrd                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-5sn7m                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-8gn2w                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-bjf44                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-c7x8j                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-d5rxg                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-gpf59                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-hhq4g                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-kztnk                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-l5g25                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-lzfnn                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-mbrtc                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-r44p5                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-t54c2                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-t92jg                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-t9wjj                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-tdksb                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-tn5nj                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-vh9j2                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-ztxzd                1/1     Running   0             22h
voto-mocion-web-deploy-75fb5c9759-zxsx6                1/1     Running   0             22h
cgi@okd-provisioner-nodo01:~$ oc exec -n production $(oc get pod -n production -l app=voto-mocion-web -o name | head -1) -- \
  env | grep -iE "SSO|REDIRECT|CALLBACK|CLIENT|BASE_URL|UNAXT"
NUXT_PUBLIC_API_BASE_URL=https://infra-web-production.una.ac.cr
NUXT_PUBLIC_UNAXT_AUTH_MODULO=233
NUXT_PUBLIC_UNAXT_AUTH_SSO_BASE_URL=https://sso.una.ac.cr
NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_ID=hfwXyb6jjgOUqgP0ftSaGtmQKLwa
NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_SECRET=WDAPDpY0muyvcMpfJ1vdToNZOVoa
  • Si consultamos dev
oc exec -n develop dev-voto-mocion-web-deploy-6bf96c9bb9-8crzv --   env | grep -iE "SSO|REDIRECT|CALLBACK|CLIENT|BASE_URL|UNAXT"
NUXT_PUBLIC_UNAXT_AUTH_MODULO=233
  • Resultado
NUXT_PUBLIC_UNAXT_AUTH_MODULO=233
NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_SECRET=WDAPDpY0muyvcMpfJ1vdToNZOVoa
NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_ID=hfwXyb6jjgOUqgP0ftSaGtmQKLwa
NUXT_PUBLIC_UNAXT_AUTH_SSO_BASE_URL=https://ssodesa.una.ac.cr
NUXT_PUBLIC_API_BASE_URL=https://dev-infra-web-develop.apps.okd.una.ac.cr
  • Aunque sean ambientes diferentes se recomienda manejar id de NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_ID diferentes para evitar conflictos
  • No es necesario solo recomendación
  • Si se ejecuta
oc exec -n production $(oc get pod -n production -l app=voto-mocion-web -o name | head -1) -- \
  env | grep -iE "SSO|REDIRECT|CALLBACK|CLIENT|BASE_URL|UNAXT"
  • vemos
NUXT_PUBLIC_API_BASE_URL=https://infra-web-production.una.ac.cr
NUXT_PUBLIC_UNAXT_AUTH_MODULO=233
NUXT_PUBLIC_UNAXT_AUTH_SSO_BASE_URL=https://sso.una.ac.cr
NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_ID=hfwXyb6jjgOUqgP0ftSaGtmQKLwa
NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_SECRET=WDAPDpY0muyvcMpfJ1vdToNZOVoa
  • Aqui existe un problema de seguridad y es que se esta definiendo
NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_SECRET
  • Con el prefijo PUBLIC: lo que significa que Nuxt lo incluye en el bundle del cliente — cualquier usuario puede verlo abriendo las DevTools del navegador.
  • Se recomienda definirlo como
NUXT_UNAXT_AUTH_SSO_CLIENT_SECRET
  • Esto se puede corregir con
# Quitar la variable pública y agregar la privada
oc set env deployment/voto-mocion-web-deploy \
  -n production \
  NUXT_PUBLIC_UNAXT_AUTH_SSO_CLIENT_SECRET- \
  NUXT_UNAXT_AUTH_SSO_CLIENT_SECRET=WDAPDpY0muyvcMpfJ1vdToNZOVoa
  • pero implica un cambio en el código en el archivo nuxt.config.ts ya que la variable debe estar declarada en runtimeConfig privado:
runtimeConfig: {
  // Privado — solo server side (sin PUBLIC)
  unaxt: {
    sso: {
      clientSecret: '',  // lee NUXT_UNAXT_SSO_CLIENT_SECRET
    }
  },

 
}
  • Si consultamos las variable de prod
oc exec -n production $(oc get pod -n production -l app=voto-mocion-web -o name | head -1) -- \
  env | grep -iE "SSO|REDIRECT|CALLBACK|CLIENT|BASE_URL|UNAXT"
  • Se observa que las variables
    • SIGN_IN_REDIRECT_URL
    • SIGN_OUT_REDIRECT_URL
  • No estan definidas y estas son necesarias para que WSO2 redirija de forma correcta
  • actualmente dentro del contenedor se encuentra la redirección asi
"signInRedirectUrl": "/auth/sso/login"
  • y esto es lo que causa la pantalla en blanco en los celulares (firefox)
  • en esta sección actualmente esta asi
regexp=(https://proyectobase.apps.okd.una.ac.cr/auth/sso/login|https://carritocompras.apps.okd.una.ac.cr/auth/sso/login|https://votoelectronico.apps.okd.una.ac.cr/auth/sso/login|https://votomocion.una.ac.cr/auth/sso/login|https://stg-proyectobase.apps.okd.una.ac.cr/auth/sso/login|https://stg-carritocompras.apps.okd.una.ac.cr/auth/sso/login|https://stg-votoelectronico.apps.okd.una.ac.cr/auth/sso/login|https://stg-votomocion.apps.okd.una.ac.cr/auth/sso/login|https://dev-proyectobase.apps.okd.una.ac.cr/auth/sso/login|https://dev-carritocompras.apps.okd.una.ac.cr/auth/sso/login|https://dev-votoelectronico.apps.okd.una.ac.cr/auth/sso/login|https://dev-votomocion.apps.okd.una.ac.cr/auth/sso/login)
  • aqui estos servicios estan dentro del mismo Service Provider de WSO2 client_id
  • Y deberia ser solo los del mismo servicio no combinados
  • Es decir para este servicio solo deberia estar
regexp=(
  https://votomocion.una.ac.cr/auth/sso/login|
  https://stg-votomocion.apps.okd.una.ac.cr/auth/sso/login|
  https://dev-votomocion.apps.okd.una.ac.cr/auth/sso/login
)
  • entonces para solucionarlo se puede aplicar (esto en vivo pero creo que se puede aplicar en la config y volver a desplegar)
oc set env deployment/voto-mocion-web-deploy \
  -n production \
  NUXT_PUBLIC_UNAXT_AUTH_SSO_SIGN_IN_REDIRECT_URL=https://votomocion.una.ac.cr/auth/sso/login \
  NUXT_PUBLIC_UNAXT_AUTH_SSO_SIGN_OUT_REDIRECT_URL=https://votomocion.una.ac.cr/auth/sso/login
  • Verificar que el rolling update completó
# Producción
oc rollout status deployment/voto-mocion-web-deploy -n production

# Confirmar que las variables quedaron aplicadas
oc exec -n production $(oc get pod -n production -l app=voto-mocion-web -o name | head -1) -- \
  env | grep REDIRECT