Skip to content

Autenticacion y credenciales

ms-recargas maneja dos planos de autenticacion distintos:

  1. autenticacion de entrada al microservicio
  2. credenciales tecnicas de salida hacia Claro SPR

El dashboard y n8n nunca llaman directo al XML de Claro; siempre entran por HTTP JSON al modulo.

EsquemaHeaderUso
Bearer JWTAuthorization: Bearer <token>Dashboard interno
ServiceKeyx-service-key: <key>n8n y llamadas internas

El AuthGuard extrae el token, llama a POST /api/internal/users/validate_token en ms-auth, cachea la respuesta en Redis por 60 segundos y adjunta request.user = { id, email, permissions[] }.

El PermissionsGuard aplica autorizacion por permisos y exige que todos los permisos declarados por el endpoint existan en request.user.permissions.

Para recargas se usan principalmente:

  • create_recargas
  • view_recargas

La recarga manual requiere un segundo factor de autorizacion por accion. Ademas del JWT normal, el frontend debe enviar X-Action-Token.

Flujo resumido:

  1. POST /api/v1/auth/issue-action-otp con purpose=RECHARGE.
  2. ms-auth envia un codigo de 6 digitos al correo del operador.
  3. POST /api/v1/auth/verify-action-otp devuelve un action_token con vida corta.
  4. POST /api/v1/recargas/recharge consume ese token una sola vez.

Reglas relevantes:

  • action_otp_token: TTL de 2 minutos.
  • OTP numerico: TTL de 60 segundos en Redis.
  • action_token: TTL de 2 minutos.
  • El jti del token se quema via SET NX EX para impedir replay.

El ServiceKeyGuard compara el header x-service-key con la variable SERVICE_KEY. Este esquema se usa para el webhook de n8n y para integraciones internas sin contexto de usuario.

Es el mismo patron operativo usado en ms-auth, ms-mba y ms-blog.

EndpointAuth requeridaPermiso
POST /api/v1/recargas/rechargeBearer JWT + X-Action-Tokencreate_recargas
POST /api/v1/recargas/webhook/invoice-rechargeServiceKeyNo aplica
GET /api/v1/recargas/transactionsBearer JWTview_recargas
GET /api/v1/recargas/transactions/:idBearer JWTview_recargas
POST /api/v1/recargas/query-rechargeBearer JWTview_recargas
GET /api/v1/recargas/inventoryBearer JWTview_recargas
ControlAplica aResultado al fallar
ActionTokenGuardPOST /recargas/recharge401
ThrottlerGuard grupo recharge (5/60s)POST /recargas/recharge429
DailyRechargeLimitGuardPOST /recargas/recharge429

Los usuarios con permiso unlimited_recargas omiten el limite diario.

Cada request XML enviado al SPR debe incluir estas credenciales de integracion:

CampoDescripcionValor de desarrollo
USERIDUsuario tecnico con el cual se accede al servicio.PRUEBAREC
PASSWORDCredencial asignada al USERID.5566
TOKENCodigo de seguridad entregado por Claro. El ente invocador debe enviarlo para su validacion.PRUEBACOMPANI
COMPANYIDIdentificador de la compania o proveedor que consume el servicio.PRUEBACOMPANI
CONSUMERIDIdentificador del consumidor o punto final integrador.PRUEBAREC_001
USERNAMEUsuario asignado a la persona que realiza la transaccion. Aplica cuando la transaccion se envia desde una aplicacion manipulada por una persona.PRUEBAREC
TERMINALIdentificador unico del dispositivo tecnologico desde el cual se envia la transaccion (IP o nombre).10.35.2.78

Estas credenciales viven como variables de entorno del servicio. No viajan desde el dashboard ni desde n8n.

VariableUso
SERVICE_KEYLlave del webhook y consumo interno
CLARO_SPR_URLEndpoint del SPR
CLARO_MOCK_MODEActiva ClaroMockService
CLARO_USERID / CLARO_PASSWORD / CLARO_TOKENCredenciales directas de Claro
CLARO_COMPANYID / CLARO_CONSUMERID / CLARO_USERNAMEIdentidad de la entidad integradora
CLARO_TERMINALTerminal autorizado en Claro
CLARO_CHANNEL_ID / CLARO_MEDIA_ID / CLARO_MEDIADETAIL_IDMetadatos del canal MOVILPOS
CLARO_LATITUDE / CLARO_LONGITUDE / CLARO_AZIMUTH / CLARO_CELLIDGeolocalizacion del POS
CLARO_PROVINCE / CLARO_PARISH / CLARO_EXTERNAL_STOCKContexto territorial y stock declarado
CLARO_AUTH_URL / CLARO_CLIENT_CREDENTIALS / CLARO_AUDIENCEOAuth2 cuando Claro habilite ese flujo
CLARO_TOKEN_CACHE_PREFIX / CLARO_TOKEN_REFRESH_MARGIN_SECONDSCache del token de Claro en Redis
NOTIFICATION_EMAIL_DEFAULTDestino por defecto para rechazos del webhook
ServicioVariableUso
ms-authJWT_ACTION_OTP_EXPIRATIONExpiracion del JWT action-otp
ms-authJWT_ACTION_TOKEN_EXPIRATIONExpiracion del JWT action
ms-authACTION_OTP_TTL_SECONDSVida del codigo OTP en Redis
ms-recargasRECARGAS_DAILY_LIMITLimite diario por usuario
ms-recargasNOTIFICATION_EMAIL_DEFAULTBuzon de operaciones por defecto
<umsprot version="1">
<exec_req function="sre_movilposd_76186">
<data name="USERID">PRUEBAREC</data>
<data name="PASSWORD">5566</data>
<data name="TOKEN">PRUEBACOMPANI</data>
<data name="COMPANYID">PRUEBACOMPANI</data>
<data name="CONSUMERID">PRUEBAREC_001</data>
<data name="USERNAME">PRUEBAREC</data>
<data name="TERMINAL">10.35.2.78</data>
</exec_req>
</umsprot>

Ademas de las credenciales, la IP desde la cual se invoca el servicio debe estar registrada en la configuracion del SPR. Si la IP no esta validada, Claro responde con faultCode=350:

<env:Fault>
<faultcode>350</faultcode>
<faultstring>El id_requerimiento es nulo debido a que el xml recibido
en el body del request no corresponde a ningun formato configurado
para la ip del llamante: 10.35.2.31</faultstring>
</env:Fault>

ms-recargas debe tratar este caso como unavailable, devolver 502 y registrar una alerta operacional claro.ip_rejected.

  • El dashboard autentica usuarios.
  • n8n autentica sistemas.
  • ms-recargas autentica la salida a Claro.

Eso permite cambiar credenciales de Claro sin tocar el frontend ni el workflow de n8n.

  1. No expongas SERVICE_KEY, PASSWORD ni TOKEN en logs, commits o respuestas HTTP.
  2. Valida que la IP saliente este registrada en Claro antes de pruebas reales.
  3. Manten separado el control de permisos del dashboard y la autenticacion tecnica del webhook.
  4. Si cambias credenciales de Claro, vuelve a probar recarga, consulta e inventario.