← Volver a Middleware

JwtAutoRefreshMiddleware

Middleware para renovación automática de tokens JWT próximos a expirar

📊 Resumen del Middleware

224
Líneas de Código
5
Minutos Threshold
RMAuth
Servicio Externo
Headers
Notificación Cliente

El JwtAutoRefreshMiddleware es un componente inteligente del sistema RestMaster que monitorea automáticamente la expiración de tokens JWT y los renueva de forma transparente antes de que expiren. Este middleware mejora la experiencia del usuario al evitar interrupciones por tokens expirados y mantiene la seguridad del sistema.

🎯 Funcionalidades Principales

  • Detección automática: Identifica tokens próximos a expirar
  • Renovación transparente: Renueva tokens sin interrumpir al usuario
  • Integración RMAuth: Comunicación con servicio de autenticación
  • Notificación al cliente: Informa sobre renovación mediante headers
  • Configuración flexible: Threshold configurable para renovación
  • Manejo de errores: Continuación con token original si falla
  • Logging detallado: Registro de eventos de renovación
  • Fallback graceful: No interrumpe el flujo si falla

🔧 Dependencias y Servicios

Servicios Inyectados por Constructor:

  • RequestDelegate next - Pipeline de middleware
  • ILogger<JwtAutoRefreshMiddleware> - Logging de eventos
  • HttpClient - Cliente HTTP para comunicación con RMAuth
  • IConfiguration - Configuración de la aplicación

⚙️ Configuración Requerida

  • RMAuth:BaseUrl: URL base del servicio RMAuth (default: http://localhost:1479)
  • RMAuth:RefreshThresholdMinutes: Minutos antes de expirar para renovar (default: 5)

📋 Flujo de Procesamiento

🎯 Pipeline de Renovación

  1. Detección de token: Verifica si existe header Authorization Bearer
  2. Análisis de expiración: Lee y analiza el JWT token
  3. Evaluación de threshold: Comprueba si está próximo a expirar
  4. Extracción de información: Obtiene installation y usuario del token
  5. Llamada a RMAuth: Solicita renovación al servicio externo
  6. Procesamiento de respuesta: Valida la respuesta del servicio
  7. Actualización de contexto: Reemplaza el token en el contexto
  8. Notificación al cliente: Envía headers informativos
  9. Continuación del pipeline: Continúa con el resto de middlewares

⚠️ Características de Seguridad

  • Validación de token: Verifica que el JWT sea válido antes de procesar
  • Extracción segura: Obtiene información sin exponer datos sensibles
  • Fallback seguro: Continúa con token original si falla renovación
  • Logging seguro: No registra tokens completos
  • Headers informativos: Notifica renovación sin exponer datos

📊 Códigos de Respuesta

✅ Continuación Normal

Sin token o token válido - continúa el pipeline

El middleware permite que la petición continúe normalmente

🔄 Token Renovado

Token renovado exitosamente
Headers añadidos: X-Token-Refreshed: true X-New-Token: [nuevo_token_jwt] X-Token-Expires-At: 2024-01-15T10:30:00Z

⚠️ Renovación Fallida

No se pudo renovar el token

Continúa con el token original y registra warning

❌ Error de Procesamiento

Error durante el análisis del token

Continúa con el token original y registra error

🔗 Integración con RMAuth

🎯 Endpoint de Renovación

  • URL: {BaseUrl}/api/Auth/refresh-token
  • Método: POST
  • Content-Type: application/json
  • Body: JSON con installation y usuario

📋 Estructura de Request

{ "codigoInstalacion": "INST001", "usuario": "admin" }

📋 Estructura de Response

{ "success": true, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "message": "Token refreshed successfully" }

🔍 Análisis de Tokens JWT

🎯 Información Extraída

  • Expiration Time: Tiempo exacto de expiración (ValidTo)
  • Installation: Código de instalación del claim "installation"
  • Usuario: Usuario del claim "sub" (Subject)
  • Validez: Verificación de que el token sea legible

📊 Cálculo de Threshold

  • Threshold por defecto: 5 minutos antes de expirar
  • Cálculo: timeUntilExpiration.TotalMinutes ≤ threshold
  • Configuración: Modificable en appsettings.json
  • Logging: Registra tiempo restante cuando está próximo

⚠️ Manejo de Errores de Token

  • Token no legible: Continúa sin procesar
  • Claims faltantes: No procede con renovación
  • Token expirado: No intenta renovar
  • Formato inválido: Logs error y continúa

🔍 Características Técnicas

🎯 Características del Middleware

  • Async/Await: Operaciones asíncronas completas
  • JWT Security Token Handler: Análisis seguro de tokens
  • HttpClient: Comunicación HTTP con RMAuth
  • JSON Serialization: Serialización/deserialización de requests
  • Configuration Binding: Configuración flexible
  • Error Handling: Manejo robusto de excepciones
  • Logging Structured: Logging detallado con contexto
  • Header Management: Gestión de headers de respuesta

⚠️ Consideraciones de Seguridad

  • No expone tokens completos en logs
  • Valida tokens antes de procesar
  • Maneja errores de forma segura
  • No almacena tokens en memoria
  • Utiliza HTTPS para comunicación con RMAuth
  • Headers informativos sin datos sensibles

📝 Patrones de Diseño Utilizados

  • Middleware Pattern: Procesamiento en pipeline
  • Chain of Responsibility: Delegación de responsabilidades
  • Strategy Pattern: Diferentes estrategias según estado del token
  • Factory Pattern: Creación de JWT handlers
  • Observer Pattern: Notificación de renovación
  • Template Method: Estructura común de renovación

📈 Estadísticas de Rendimiento

O(1)
Análisis JWT
HTTP
Comunicación RMAuth
5min
Threshold Default
Headers
Notificación Cliente

Optimizaciones Implementadas:

🔗 Integración con Otros Componentes

🎯 Middleware Relacionados

  • JwtLoggingMiddleware: Complementa el logging de autenticación
  • GrafanaLoggingMiddleware: Logging de eventos de renovación
  • ErrorHandlingMiddleware: Manejo de errores de renovación
  • DayOpenValidationMiddleware: Validación con tokens renovados

📋 Orden de Ejecución Recomendado

  1. SpanishCultureMiddleware: Configuración de cultura
  2. GrafanaLoggingMiddleware: Logging de inicio
  3. JwtLoggingMiddleware: Logging de autenticación
  4. JwtAutoRefreshMiddleware: Renovación de tokens
  5. DayOpenValidationMiddleware: Validación de día abierto
  6. ErrorHandlingMiddleware: Manejo de errores

📋 Casos de Uso

🎯 Escenarios de Renovación

  • Token válido: Continúa sin renovación
  • Token próximo a expirar: Renovación automática exitosa
  • Token expirado: No intenta renovar
  • RMAuth no disponible: Continúa con token original
  • Token inválido: No procesa renovación
  • Claims faltantes: No procede con renovación
  • Error de red: Fallback graceful
  • Respuesta inválida: Continúa con token original

🔍 Ejemplos de Comportamiento

  • Renovación exitosa: "Token renovado exitosamente. Nuevo token expira en: 2024-01-15T10:30:00Z"
  • Renovación fallida: "No se pudo renovar el token automáticamente: Error en la respuesta de RMAuth: 500"
  • Token próximo: "Token expira en 3.5 minutos"
  • Sin token: Continúa sin procesar
  • Token inválido: "Error al verificar la expiración del token"