Este diagrama muestra el proceso completo desde que un usuario intenta acceder hasta que obtiene una sesión válida:
flowchart TD
A[Usuario solicita acceso] --> B{¿RFC empresa válido?}
B -->|No| C[Error: Empresa no encontrada]
B -->|Sí| D{¿Usuario existe en empresa?}
D -->|No| E[Error: Usuario no autorizado]
D -->|Sí| F{¿Credenciales correctas?}
F -->|No| G[Incrementar contador fallos]
G --> H{¿Excede límite intentos?}
H -->|Sí| I[Bloquear IP temporalmente]
H -->|No| J[Aplicar demora progresiva]
J --> K[Permitir nuevo intento]
F -->|Sí| L[Generar huella digital dispositivo]
L --> M{¿Dispositivo conocido?}
M -->|No| N[Registrar nuevo dispositivo]
M -->|Sí| O[Validar consistencia dispositivo]
N --> P{¿Excede límite dispositivos?}
P -->|Sí| Q[Solicitar aprobación administrativa]
P -->|No| R[Proceder con autenticación]
O --> S{¿Dispositivo consistente?}
S -->|No| T[Activar validaciones adicionales]
S -->|Sí| R
R --> U[Verificar disponibilidad licencias]
T --> U
Q --> U
U --> V{¿Licencias disponibles?}
V -->|No| W[Error: Sin licencias disponibles]
V -->|Sí| X[Reservar licencia temporalmente]
X --> Y{¿Sesión previa activa?}
Y -->|Sí| Z[Terminar sesión anterior]
Y -->|No| AA[Crear nueva sesión]
Z --> AA
AA --> BB[Confirmar asignación licencia]
BB --> CC[Establecer conexión WebSocket]
CC --> DD[Iniciar heartbeat bidireccional]
DD --> EE[Sesión activa establecida]
C --> FF[Fin: Acceso denegado]
E --> FF
I --> FF
W --> FF
EE --> GG[Fin: Acceso concedido]
Este diagrama ilustra cómo el sistema maneja los cambios en tiempo real del número de licencias disponibles:
flowchart TD
A[Sistema detecta cambio en licencias] --> B{¿Tipo de cambio?}
B -->|Aumento| C[Actualizar límite disponible]
C --> D[Notificar usuarios en cola de espera]
D --> E[Permitir nuevas autenticaciones]
B -->|Reducción| F[Calcular sesiones excedentes]
F --> G{¿Hay excedentes?}
G -->|No| H[Solo actualizar límite]
G -->|Sí| I[Identificar sesiones a terminar]
I --> J[Aplicar política FIFO]
J --> K[Notificar usuarios afectados<br/>60 segundos previos]
K --> L[Mostrar mensaje de desconexión]
L --> M[Esperar tiempo gracia]
M --> N[Terminar sesiones seleccionadas]
N --> O[Liberar licencias]
O --> P[Actualizar contadores]
H --> Q[Fin: Límites actualizados]
E --> Q
P --> Q
Este diagrama muestra la máquina de estados de una sesión y sus transiciones:
stateDiagram-v2
[*] --> Creando
Creando --> Activa : Licencia asignada exitosamente
Creando --> Fallida : Sin licencias / Error de validación
Activa --> Suspendida : Pérdida de conexión
Activa --> Reservada_Offline : App móvil sin conexión < 24h
Activa --> Terminando : Cierre solicitado por usuario
Activa --> Terminando : Detección de fraude
Activa --> Terminando : Reducción de licencias (FIFO)
Suspendida --> Activa : Reconexión dentro de 5 minutos
Suspendida --> Terminando : Timeout > 10 minutos
Suspendida --> Terminando : Fallo de reconexión (5 intentos)
Reservada_Offline --> Activa : Reconexión exitosa < 24h
Reservada_Offline --> Terminando : Timeout offline > 24h
Reservada_Offline --> Terminando : Reducción de licencias crítica
Terminando --> Finalizada : Liberación de licencia completada
Fallida --> [*]
Finalizada --> [*]
note right of Activa
Heartbeat cada 30 segundos
Monitoreo de comportamiento
Validación de dispositivo
Renovación automática de token
end note
note right of Suspendida
Licencia reservada
Ventana de gracia activa
Intentos de reconexión
end note
note right of Reservada_Offline
Licencia reservada 24h máximo
Validación local de token
Registro de operaciones offline
end note
flowchart LR
subgraph "GM Fiscal (Crítica Tiempo Real)"
A1[Activa] --> A2[Prompt Renovación<br/>13 min]
A2 --> A3[Timeout<br/>15 min]
A3 --> A4[Terminada]
end
subgraph "Doble Check (Semi Persistente)"
B1[Activa] --> B2[Suspendida<br/>Gracia 30 min]
B2 --> B3[Timeout<br/>2 horas]
B3 --> B4[Terminada]
end
subgraph "GM Mis Viajes (Móvil Offline)"
C1[Activa] --> C2[Reservada Offline<br/>24 horas]
C2 --> C3[Auto-terminada<br/>24h cumplidas]
C2 --> C4[Reconectada<br/>Sincronización]
C4 --> C1
end
classDef critica fill:#ffebee,stroke:#f44336
classDef semi fill:#fff3e0,stroke:#ff9800
classDef movil fill:#e8f5e8,stroke:#4caf50
class A1,A2,A3,A4 critica
class B1,B2,B3,B4 semi
class C1,C2,C3,C4 movil
Este diagrama muestra cómo el sistema maneja perfiles de comportamiento configurables dinámicamente:
flowchart TD
A[Solicitud de autenticación] --> B[Identificar aplicación]
B --> C[Consultar perfil de comportamiento]
C --> D{¿Perfil existe?}
D -->|No| E[Aplicar perfil por defecto]
D -->|Sí| F[Cargar configuración del perfil]
E --> G[Generar token con parámetros por defecto]
F --> H[Generar token con parámetros del perfil]
H --> I[Aplicar configuraciones específicas]
I --> J{¿Tipo de configuración?}
J -->|Critical Realtime| K[session_timeout: 15min<br/>heartbeat: 60sec<br/>offline_grace: 0min<br/>validation: strict]
J -->|Desktop Persistent| L[session_timeout: 120min<br/>heartbeat: 300sec<br/>offline_grace: 30min<br/>validation: moderate]
J -->|Mobile Offline| M[session_timeout: unlimited<br/>heartbeat: 600sec<br/>offline_grace: 1440min<br/>validation: flexible]
J -->|Custom Profile| N[Parámetros configurables<br/>por administrador<br/>Herencia de perfil base]
K --> O[Token con perfil Critical]
L --> P[Token con perfil Desktop]
M --> Q[Token con perfil Mobile]
N --> R[Token con perfil Custom]
O --> S[Enviar a aplicación cliente]
P --> S
Q --> S
R --> S
G --> S
flowchart TD
A[Nueva aplicación se inicia] --> B[Solicitar registro en GM Authenticator]
B --> C[Enviar metadatos de aplicación]
C --> D{¿Perfil especificado?}
D -->|No| E[Analizar características de la aplicación]
D -->|Sí| F[Validar perfil contra catálogo]
E --> G[Sugerir perfil base apropiado]
G --> H[Aplicación confirma o personaliza]
F --> I{¿Perfil válido?}
I -->|No| J[Error: Perfil no válido]
I -->|Sí| K[Registrar aplicación con perfil]
H --> L[Crear/actualizar perfil personalizado]
L --> M[Validar configuración del perfil]
M --> N{¿Configuración válida?}
N -->|No| O[Error: Configuración inválida]
N -->|Sí| K
K --> P[Almacenar en registro de aplicaciones]
P --> Q[Generar ID de aplicación único]
Q --> R[Aplicación registrada exitosamente]
J --> S[Fin: Registro fallido]
O --> S
R --> T[Fin: Registro exitoso]
flowchart TD
A[Administrador modifica perfil] --> B[Validar nueva configuración]
B --> C{¿Configuración válida?}
C -->|No| D[Error: Configuración inválida]
C -->|Sí| E[Actualizar definición del perfil]
E --> F[Notificar cambio a sistema de cache]
F --> G[Identificar sesiones afectadas]
G --> H{¿Aplicar inmediatamente?}
H -->|No| I[Aplicar en próxima renovación de token]
H -->|Sí| J[Aplicar a sesiones activas]
J --> K[Actualizar tokens existentes]
K --> L[Notificar aplicaciones del cambio]
I --> M[Marcar para aplicación diferida]
M --> N[Aplicar en próxima validación]
L --> O[Registrar cambio en auditoría]
N --> O
O --> P[Fin: Configuración actualizada]
D --> Q[Fin: Cambio rechazado]
flowchart TD
A[GM Mis Viajes solicita autenticación] --> B[Generar token con TTL 24 horas]
B --> C[Marcar licencia como RESERVADA_OFFLINE]
C --> D[Aplicación inicia operación normal]
D --> E{¿Conexión disponible?}
E -->|Sí| F[Heartbeat cada 10 minutos]
E -->|No| G[Iniciar modo offline]
F --> H[Validar token en servidor]
H --> I{¿Token válido?}
I -->|Sí| J[Continuar operación online]
I -->|No| K[Renovar token automáticamente]
K --> J
G --> L[Validar token localmente]
L --> M{¿Token < 24 horas?}
M -->|Sí| N[Continuar operación offline]
M -->|No| O[Bloquear aplicación - token expirado]
N --> P[Registrar operaciones offline]
P --> Q{¿Reconexión disponible?}
Q -->|No| R[Continuar offline hasta límite]
Q -->|Sí| S[Iniciar proceso de sincronización]
R --> T{¿24 horas cumplidas?}
T -->|No| N
T -->|Sí| U[Auto-cerrar aplicación]
U --> V[Liberar licencia automáticamente]
S --> W[Validar token contra servidor]
W --> X{¿Token aún válido?}
X -->|No| Y[Solicitar reautenticación]
X -->|Sí| Z[Sincronizar operaciones offline]
Z --> AA[Renovar token para período online]
AA --> BB[Cambiar licencia a ACTIVA]
BB --> J
O --> V
Y --> CC[Fin: Reautenticación requerida]
V --> DD[Fin: Sesión terminada]
J --> EE[Continuar operación]
Este diagrama explica cómo se generan, validan y renuevan los tokens de sesión para mantener la seguridad:
flowchart TD
A[Autenticación exitosa] --> B[Generar datos del token]
B --> C[Crear payload del token]
C --> D{¿Información del payload?}
D -->|Incluir| E[ID de sesión único]
D -->|Incluir| F[RFC de empresa]
D -->|Incluir| G[ID de usuario]
D -->|Incluir| H[Timestamp de creación]
D -->|Incluir| I[Huella digital dispositivo]
D -->|Incluir| J[Tiempo de expiración]
D -->|Incluir| K[Permisos/alcance]
E --> L[Consolidar payload completo]
F --> L
G --> L
H --> L
I --> L
J --> L
K --> L
L --> M[Firmar token con clave secreta]
M --> N[Generar token JWT completo]
N --> O[Almacenar referencia en Redis]
O --> P[Enviar token a aplicación cliente]
P --> Q[Cliente almacena token]
Q --> R[Cliente incluye token en peticiones]
R --> S{¿Validación del token?}
S -->|Verificar| T[Validar firma digital]
S -->|Verificar| U[Verificar expiración]
S -->|Verificar| V[Verificar huella dispositivo]
S -->|Verificar| W[Verificar sesión activa en Redis]
T --> X{¿Firma válida?}
U --> Y{¿No expirado?}
V --> Z{¿Dispositivo consistente?}
W --> AA{¿Sesión existe y activa?}
X -->|No| BB[Rechazar: Token inválido]
Y -->|No| CC[Rechazar: Token expirado]
Z -->|No| DD[Rechazar: Dispositivo inconsistente]
AA -->|No| EE[Rechazar: Sesión no válida]
X -->|Sí| FF[Validación de firma OK]
Y -->|Sí| FF
Z -->|Sí| FF
AA -->|Sí| FF
FF --> GG[Actualizar timestamp último acceso]
GG --> HH[Permitir operación solicitada]
subgraph "Renovación Automática"
II[Token próximo a expirar<br/>< 15 minutos]
II --> JJ[Generar nuevo token]
JJ --> KK[Mantener sesión activa]
KK --> LL[Enviar nuevo token a cliente]
LL --> MM[Cliente actualiza token]
end
CC --> II
BB --> NN[Fin: Acceso denegado]
DD --> NN
EE --> NN
HH --> OO[Fin: Operación autorizada]
MM --> OO
flowchart TD
A[Cliente intenta reconectar] --> B[Enviar token almacenado]
B --> C{¿Cliente tiene token válido?}
C -->|No| D[Solicitar nueva autenticación completa]
C -->|Sí| E[Validar token contra sistema]
E --> F{¿Token válido y no expirado?}
F -->|No| G[Verificar si sesión suspendida]
F -->|Sí| H[Validar estado de sesión]
G --> I{¿Sesión en ventana de gracia?}
I -->|No| J[Token inválido - requiere reautenticación]
I -->|Sí| K[Permitir reconexión con token actual]
H --> L{¿Sesión activa o suspendida?}
L -->|Terminada| M[Token inválido - nueva autenticación]
L -->|Activa| N[Restaurar conexión inmediata]
L -->|Suspendida| O[Verificar ventana de gracia]
O --> P{¿Dentro de ventana de gracia?}
P -->|Sí| Q[Restaurar sesión a estado ACTIVA]
P -->|No| R[Sesión expirada - nueva autenticación]
K --> S[Generar nuevo token con expiración extendida]
N --> T[Mantener token actual]
Q --> S
S --> U[Actualizar timestamp sesión]
T --> U
U --> V[Reanudar heartbeat normal]
D --> W[Fin: Reautenticación requerida]
J --> W
M --> W
R --> W
V --> X[Fin: Reconexión exitosa]
sequenceDiagram
participant C as Cliente
participant GM as GM Authenticator
participant R as Redis
participant AT as Azure Tables
Note over C,AT: Validación en cada Heartbeat
C->>GM: Heartbeat con token
GM->>GM: Verificar firma token
alt Token válido
GM->>R: Verificar sesión activa
alt Sesión existe
GM->>R: Actualizar timestamp
GM->>AT: Log actividad (cada 5 minutos)
GM-->>C: ACK - Token válido
else Sesión no existe
GM-->>C: Error - Sesión inválida
Note over C: Cliente debe reautenticar
end
else Token inválido/expirado
GM->>R: Verificar si sesión en gracia
alt En ventana de gracia
GM->>GM: Generar nuevo token
GM->>R: Actualizar sesión
GM-->>C: Nuevo token + ACK
C->>C: Almacenar nuevo token
else Fuera de gracia
GM-->>C: Error - Reautenticación requerida
end
end
Note over C,AT: Renovación Automática
alt Token próximo a expirar (< 15 min)
GM->>GM: Detectar próxima expiración
GM->>R: Verificar sesión válida
GM->>GM: Generar token renovado
GM->>AT: Log renovación token
GM-->>C: Nuevo token (renovación automática)
C->>C: Reemplazar token anterior
end
Note over C,AT: Comunicación fuera de Internet
C->>C: Detectar pérdida conectividad
C->>C: Almacenar operaciones offline
Note over C: Mantiene token en memoria
C->>GM: Reconectar con token almacenado
GM->>GM: Validar token offline
alt Token aún válido
GM->>R: Verificar estado sesión
alt Sesión suspendida < 10 min
GM->>R: Restaurar sesión activa
GM->>AT: Log reconexión exitosa
GM-->>C: Reconexión aceptada
C->>GM: Sincronizar operaciones offline
else Sesión terminada
GM-->>C: Token inválido - reautenticar
end
else Token expirado
GM-->>C: Token expirado - reautenticar
end
Este diagrama muestra cómo el sistema detecta y responde a comportamientos sospechosos:
flowchart TD
A[Sesión activa en monitoreo] --> B[Recopilar métricas de comportamiento]
B --> C{¿Patrón anómalo detectado?}
C -->|No| D[Continuar monitoreo normal]
D --> B
C -->|Sí| E[Analizar tipo de anomalía]
E --> F{¿Tipo de anomalía?}
F -->|Geográfica| G[Múltiples ubicaciones simultáneas]
F -->|Temporal| H[Patrones de uso inconsistentes]
F -->|Dispositivo| I[Cambios súbitos en huella digital]
F -->|Heartbeat| J[Patrones irregulares de conexión]
F -->|Token| K[Uso sospechoso de tokens]
G --> L[Evaluar severidad geográfica]
H --> M[Evaluar severidad temporal]
I --> N[Evaluar severidad dispositivo]
J --> O[Evaluar severidad conexión]
K --> P[Evaluar severidad token]
L --> Q{¿Severidad alta?}
M --> Q
N --> Q
O --> Q
P --> Q
Q -->|No| R[Marcar para revisión]
Q -->|Sí| S[Activar protocolo de seguridad]
R --> T[Incrementar nivel vigilancia]
T --> U[Solicitar validación adicional]
U --> V[Reducir tiempo expiración token]
V --> B
S --> W[Suspender sesión inmediatamente]
W --> X[Invalidar todos los tokens]
X --> Y[Liberar licencia]
Y --> Z[Notificar usuario del incidente]
Z --> AA[Registrar evento en auditoría]
AA --> BB[Bloquear acceso temporal]
BB --> CC[Requerir proceso recuperación]
CC --> DD[Fin: Acceso bloqueado por seguridad]
Este diagrama detalla cómo el sistema maneja las interrupciones de red y reconexiones:
flowchart TD
A[Sesión activa perdiendo conexión] --> B[Detectar falta de heartbeat]
B --> C[Iniciar cronómetro de gracia]
C --> D[Cambiar estado a SUSPENDIDA]
D --> E{¿Usuario intenta reconectar?}
E -->|No| F[Esperar pasivamente]
E -->|Sí| G[Validar identidad y sesión]
F --> H{¿Timeout < 5 minutos?}
G --> I{¿Validación exitosa?}
I -->|No| J[Rechazar reconexión]
I -->|Sí| K[Aplicar backoff exponencial]
J --> L[Incrementar contador fallos]
L --> M{¿Excede límite intentos?}
M -->|Sí| N[Marcar sesión irrecuperable]
M -->|No| O[Permitir nuevo intento]
K --> P[Intentar restablecimiento]
P --> Q{¿Reconexión exitosa?}
Q -->|Sí| R[Restaurar estado ACTIVA]
Q -->|No| S[Incrementar contador reconexión]
S --> T{¿Intentos < 5?}
T -->|Sí| U[Esperar tiempo backoff]
T -->|No| N
U --> K
H -->|Sí| V[Mantener en SUSPENDIDA]
H -->|No| W{¿Timeout < 10 minutos?}
W -->|Sí| V
W -->|No| X[Activar liberación automática]
V --> E
R --> Y[Reanudar heartbeat normal]
Y --> Z[Fin: Sesión recuperada]
N --> AA[Liberar licencia definitivamente]
X --> AA
O --> E
AA --> BB[Fin: Sesión terminada]
Este diagrama muestra cómo GM Authenticator coexiste con los sistemas existentes:
flowchart LR
subgraph "Aplicaciones Cliente"
A1[App Moderna<br/>WebSocket]
A2[App Legacy<br/>HTTP Polling]
A3[App Híbrida<br/>Multi-protocolo]
end
subgraph "GM Authenticator"
B1[Detector de Capacidades]
B2[Adaptador WebSocket]
B3[Adaptador HTTP]
B4[Gestor de Sesiones Unificado]
B5[Monitor de Coherencia]
B6[Validador de Tokens]
end
subgraph "Sistemas ERP Legacy"
C1[Servicios SOAP]
C2[GMTERP_Principal]
C3[Bases Datos Cliente]
end
A1 --> B1
A2 --> B1
A3 --> B1
B1 -->|WebSocket detectado| B2
B1 -->|HTTP detectado| B3
B1 -->|Capacidades mixtas| B2
B1 --> B3
B2 --> B4
B3 --> B4
B4 <--> B6
B4 <--> B5
B5 <--> C1
B4 --> C2
C2 --> C3
B5 -->|Sincronización| B4
B6 -->|Validación continua| B4
classDef modern fill:#e1f5fe
classDef legacy fill:#fff3e0
classDef gmauth fill:#e8f5e8
class A1 modern
class A2,A3,C1,C2,C3 legacy
class B1,B2,B3,B4,B5,B6 gmauth
Este diagrama ilustra cómo se registran y conservan los eventos para cumplimiento regulatorio:
flowchart TD
A[Evento de autenticación ocurre] --> B[Capturar metadatos del evento]
B --> C[Determinar tipo de evento]
C --> D{¿Tipo de evento?}
D -->|Login exitoso| E[Registrar: usuario, RFC, IP, dispositivo, timestamp, token_id]
D -->|Login fallido| F[Registrar: intento, razón fallo, IP, timestamp]
D -->|Sesión terminada| G[Registrar: duración, motivo cierre, métricas, token_invalidado]
D -->|Cambio licencias| H[Registrar: valores anterior/nuevo, impacto]
D -->|Incidente seguridad| I[Registrar: tipo amenaza, acciones tomadas, tokens_afectados]
D -->|Renovación token| J[Registrar: token_anterior, token_nuevo, motivo_renovación]
D -->|Token inválido| K[Registrar: token_rechazado, razón_rechazo, acción_tomada]
D -->|Sesión offline| L[Registrar: inicio_offline, app_tipo, duración_estimada]
D -->|Reconexión offline| M[Registrar: fin_offline, duración_real, operaciones_sincronizadas]
D -->|Timeout offline| N[Registrar: timeout_offline, liberación_licencia, tipo_aplicacion]
E --> L[Crear registro inmutable]
F --> L
G --> L
H --> L
I --> L
J --> L
K --> L
L --> L
M --> L
N --> L
L --> M[Almacenar en registro permanente]
M --> N[Aplicar políticas de retención]
N --> O{¿Requiere alerta inmediata?}
O -->|Sí| P[Enviar notificación a administradores]
O -->|No| Q[Continuar con siguiente evento]
P --> R[Generar reporte de incidente]
R --> S[Activar procedimientos respuesta]
Q --> T[Fin: Evento registrado]
S --> T
subgraph "Políticas de Retención"
U[Logs autenticación: 5 años]
V[Datos sesión activa: Vida útil + 90 días]
W[Registros incidentes: Permanente]
X[Historial tokens: 1 año]
end
N -.-> U
N -.-> V
N -.-> W
N -.-> X
Este diagrama muestra el sistema de monitoreo continuo y generación de alertas:
flowchart TD
A[Sistema en operación] --> B[Recopilar métricas en tiempo real]
B --> C[Evaluar métricas críticas]
C --> D{¿Tiempo respuesta > 2 seg?}
C --> E{¿Tasa fallos > 5%?}
C --> F{¿Uso licencias > 80%?}
C --> G{¿Disponibilidad < 99.5%?}
D -->|Sí| H{¿Tiempo > 5 seg?}
D -->|No| I[Continuar monitoreo]
H -->|Sí| J[Alerta CRÍTICA: Rendimiento]
H -->|No| K[Alerta ADVERTENCIA: Rendimiento]
E -->|Sí| L[Alerta CRÍTICA: Tasa fallos]
E -->|No| I
F -->|Sí| M{¿Uso > 95%?}
F -->|No| I
M -->|Sí| N[Alerta CRÍTICA: Licencias agotándose]
M -->|No| O[Alerta ADVERTENCIA: Alto uso licencias]
G -->|Sí| P[Alerta CRÍTICA: Disponibilidad]
G -->|No| I
J --> Q[Escalación automática]
L --> Q
N --> Q
P --> Q
K --> R[Notificación equipo técnico]
O --> R
Q --> S[Activar procedimientos emergencia]
R --> T[Investigación programada]
S --> U[Evaluar activación modo emergencia]
T --> V[Optimización preventiva]
I --> W[Actualizar dashboard tiempo real]
W --> B
U --> X{¿Requiere modo emergencia?}
X -->|Sí| Y[Activar autenticación directa ERP]
X -->|No| Z[Continuar con mitigaciones]
Y --> AA[Notificar usuarios del cambio]
Z --> BB[Aplicar correcciones automáticas]
V --> CC[Fin: Mantenimiento preventivo]
AA --> CC
BB --> CC
Este diagrama detalla el proceso de respuesta ante incidentes mayores:
flowchart TD
A[Incidente detectado] --> B[Clasificar severidad automáticamente]
B --> C{¿Severidad?}
C -->|CRÍTICO| D[Respuesta inmediata < 15 min]
C -->|ALTO| E[Respuesta en 1 hora]
C -->|MEDIO| F[Respuesta en 4 horas]
C -->|BAJO| G[Respuesta siguiente día laboral]
D --> H[Notificar usuarios afectados inmediatamente]
E --> I[Notificar usuarios en 30 minutos]
F --> J[Notificar según impacto]
G --> K[Notificación rutinaria]
H --> L[Evaluar activación modo emergencia]
I --> M[Investigación prioritaria]
J --> N[Análisis programado]
K --> O[Revisión en próxima ventana]
L --> P{¿Fallo completo del sistema?}
P -->|Sí| Q[Activar modo emergencia automático]
P -->|No| R[Implementar mitigaciones graduales]
Q --> S[Permitir autenticación directa ERP]
S --> T[Establecer límite temporal 24 horas]
T --> U[Monitorear uso durante emergencia]
U --> V[Invalidar todos los tokens GM Auth]
R --> W[Aplicar degradación elegante]
W --> X[Priorizar sesiones existentes]
X --> Y[Extender expiración tokens críticos]
M --> Z[Identificar causa raíz]
N --> Z
O --> Z
Z --> AA[Implementar solución]
AA --> BB[Validar resolución]
V --> CC{¿Sistema restaurado?}
Y --> CC
BB --> CC
CC -->|No| DD[Extender modo emergencia]
CC -->|Sí| EE[Desactivar modo emergencia]
DD --> FF[Requiere aprobación administrativa]
EE --> GG[Restaurar operación normal]
GG --> HH[Revalidar todos los tokens]
FF --> II[Continuar en emergencia]
HH --> JJ[Generar reporte post-incidente]
JJ --> KK[Actualizar procedimientos]
II --> LL[Escalación a nivel ejecutivo]
KK --> MM[Fin: Incidente resuelto]
LL --> MM
Este diagrama muestra la vista general de cómo GM Authenticator se integra en el ecosistema:
graph TB
subgraph "Capa de Usuarios"
U1[👤 Usuarios Productivos]
U2[👤 Usuarios Demo]
U3[👤 Administradores]
end
subgraph "Capa de Aplicaciones"
A1[📱 Apps Móviles]
A2[💻 Apps Web]
A3[🖥️ Apps Desktop]
A4[🔧 Apps Legacy]
end
subgraph "GM Authenticator - Núcleo"
direction TB
GA1[🔐 Gestor Autenticación]
GA2[📊 Control Licencias]
GA3[🌐 Gestor Sesiones]
GA4[🎫 Gestor Tokens JWT]
GA5[🛡️ Monitor Seguridad]
GA6[📈 Auditoría]
GA1 <--> GA2
GA2 <--> GA3
GA3 <--> GA4
GA4 <--> GA5
GA5 <--> GA6
end
subgraph "Infraestructura de Datos"
direction LR
DB1[🗄️ GMTERP_Principal<br/>Control Central]
DB2[🗂️ Bases Cliente<br/>GMTERP_WEB_*]
DB3[💾 Cache Redis<br/>Estado Sesiones]
DB4[📋 Azure Tables<br/>Auditoría]
end
subgraph "Sistemas Legacy"
L1[🧮 Servicios SOAP ERP]
L2[📊 Sistemas Facturación]
L3[🚛 Apps Transporte]
end
%% Conexiones principales
U1 --> A1
U2 --> A2
U3 --> A3
A1 --> GA1
A2 --> GA1
A3 --> GA1
A4 --> GA1
GA1 --> DB1
GA2 <--> DB3
GA3 <--> DB3
GA4 <--> DB3
GA6 --> DB4
GA1 -.-> DB2
GA2 -.-> L1
L1 <--> DB1
L2 <--> DB2
L3 <--> DB2
%% Estilos
classDef users fill:#e3f2fd,stroke:#1976d2
classDef apps fill:#f3e5f5,stroke:#7b1fa2
classDef gmauth fill:#e8f5e8,stroke:#388e3c
classDef data fill:#fff3e0,stroke:#f57c00
classDef legacy fill:#fce4ec,stroke:#c2185b
class U1,U2,U3 users
class A1,A2,A3,A4 apps
class GA1,GA2,GA3,GA4,GA5,GA6 gmauth
class DB1,DB2,DB3,DB4 data
class L1,L2,L3 legacy
Este diagrama de secuencia muestra la interacción temporal entre los componentes durante una sesión típica:
sequenceDiagram
participant U as Usuario
participant A as Aplicación
participant GM as GM Authenticator
participant DB as Base Datos
participant R as Redis
participant AT as Azure Tables
Note over U,AT: Proceso de Autenticación
U->>A: Solicita acceso (RFC, User, Pass)
A->>GM: Petición autenticación
GM->>DB: Validar RFC empresa
DB-->>GM: Empresa válida
GM->>DB: Validar usuario y credenciales
DB-->>GM: Credenciales correctas
GM->>GM: Generar huella digital dispositivo
GM->>R: Verificar licencias disponibles
R-->>GM: Licencias disponibles: Sí
GM->>R: Reservar licencia temporalmente
GM->>DB: Verificar sesiones previas
DB-->>GM: Sesión previa encontrada
GM->>R: Terminar sesión anterior
GM->>R: Crear nueva sesión
GM->>AT: Registrar evento login exitoso
GM-->>A: Token sesión válido
A-->>U: Acceso concedido
Note over U,AT: Mantenimiento de Sesión Activa
loop Cada 30 segundos
A->>GM: Heartbeat
GM->>R: Actualizar timestamp sesión
GM-->>A: ACK Heartbeat
end
Note over U,AT: Detección de Problema
A->>GM: Heartbeat (falla de red)
Note over GM: No se recibe heartbeat por 90 seg
GM->>R: Cambiar estado a SUSPENDIDA
GM->>GM: Iniciar cronómetro gracia (5 min)
Note over U,AT: Recuperación
A->>GM: Intento reconexión
GM->>GM: Validar identidad
GM->>R: Restaurar estado ACTIVA
GM->>AT: Registrar evento reconexión
GM-->>A: Reconexión exitosa
Note over U,AT: Cierre de Sesión
U->>A: Solicita logout
A->>GM: Terminar sesión
GM->>R: Liberar licencia
GM->>R: Eliminar datos sesión
GM->>AT: Registrar evento logout
GM-->>A: Sesión terminada
A-->>U: Logout completado
mindmap
root)GM Authenticator(
Beneficios Operacionales
Reducción 80% consultas ERP
Eliminación conflictos licencias
Gestión centralizada sesiones
Desarrollo apps más rápido
Tokens seguros y escalables
Beneficios Seguridad
Detección automática fraude
Trazabilidad completa accesos
Políticas consistentes
Respuesta inmediata amenazas
Validación continua tokens
Invalidación inmediata compromisos
Beneficios Comerciales
Protección modelo licenciamiento
Métricas precisas uso
Licenciamiento dinámico
Reducción costos soporte
Control granular accesos
Beneficios Técnicos
Arquitectura escalable 500%
Disponibilidad 99.5%
Integración sin disrupción
Monitoreo tiempo real
Recuperación automática fallos
Soporte offline inteligente
Los diagramas presentados en este documento ilustran la complejidad y robustez del sistema GM Authenticator, mostrando cómo cada componente interactúa para garantizar:
-
Autenticación Segura - Proceso completo de validación con múltiples checkpoints
-
Control Dinámico de Licencias - Gestión en tiempo real sin pérdida de integridad
-
Manejo de Estados de Sesión - Transiciones claras y recuperación robusta, incluyendo estados offline
-
Gestión de Tokens JWT - Generación, validación, renovación y revocación segura con configuración por aplicación
-
Validación Continua de Identidad - Verificación constante durante toda la sesión
-
Detección de Fraude - Monitoreo proactivo y respuesta automática
-
Recuperación de Conectividad - Tolerancia a fallos con políticas de gracia y tokens persistentes
-
Integración Legacy - Coexistencia sin disrupción
-
Auditoría Completa - Trazabilidad para cumplimiento regulatorio incluyendo eventos de tokens y operaciones offline
-
Monitoreo y Alertas - Detección proactiva de problemas
-
Gestión de Incidentes - Respuesta estructurada por severidad con invalidación masiva de tokens
-
Configuración Diferenciada por Aplicación - Manejo específico para GM Fiscal, Doble Check, GM Mis Viajes
-
Tokens JWT Seguros - Firmados digitalmente con información de sesión y dispositivo
-
Validación Multi-Nivel - Firma, expiración, dispositivo, y estado de sesión
-
Renovación Automática - Sin interrupción para el usuario final
-
Recuperación Offline - Tokens válidos durante ventanas de gracia definidas
-
Invalidación Granular - Por usuario, sesión, o masiva en emergencias
-
Auditoría Completa - Trazabilidad de todo el ciclo de vida del token
-
Configuración por Aplicación - Políticas específicas para GM Fiscal (15 min), Doble Check (2h), GM Mis Viajes (24h offline)
-
Persistencia Local - Tokens almacenados localmente para reconexión
-
Validación Offline - Verificación local de tokens durante desconexión
-
Sincronización Inteligente - Recuperación de operaciones pendientes al reconectar
-
Ventanas de Gracia Configurables - GM Fiscal: No tolerancia, Doble Check: 30 min, GM Mis Viajes: 24 horas
-
Gestión de Licencias Offline - Reserva inteligente y liberación automática por timeout
-
GM Fiscal (Crítica) - Validación estricta, prompt a 13 min, timeout 15 min, sin tolerancia offline
-
Doble Check (Semi-persistente) - Gracia de 30 min offline, timeout 2 horas, reconexión tolerante
-
GM Mis Viajes (Móvil) - Operación offline 24h, validación local, sincronización automática
Estos diagramas servirán como referencia visual para el desarrollo, implementación y operación del sistema GM Authenticator, con especial énfasis en la robustez del sistema de tokens para garantizar seguridad y continuidad operacional.
graph TB
subgraph "Capa de Aplicaciones"
A1[📱 GM Fiscal<br/>Profile: critical_realtime]
A2[💻 Doble Check<br/>Profile: desktop_persistent]
A3[📱 GM Mis Viajes<br/>Profile: mobile_offline]
A4[🔧 Nueva App<br/>Profile: custom_profile]
end
subgraph "GM Authenticator - Núcleo Evolutivo"
direction TB
GA1[🔐 Gestor Autenticación]
GA2[📊 Motor de Perfiles Dinámicos]
GA3[🌐 Gestor Sesiones]
GA4[🎫 Gestor Tokens JWT]
GA5[🛡️ Monitor Seguridad]
GA6[📈 Auditoría]
GA7[⚙️ API Configuración]
GA1 <--> GA2
GA2 <--> GA3
GA3 <--> GA4
GA4 <--> GA5
GA5 <--> GA6
GA2 <--> GA7
end
subgraph "Almacén de Configuración"
direction LR
CF1[📋 Registro de Aplicaciones]
CF2[🎛️ Perfiles de Comportamiento]
CF3[📊 Métricas por Perfil]
CF4[🔄 Historial de Cambios]
end
subgraph "Infraestructura de Datos"
direction LR
DB1[🗄️ GMTERP_Principal<br/>Control Central]
DB2[🗂️ Bases Cliente<br/>GMTERP_WEB_*]
DB3[💾 Cache Redis<br/>Estado Sesiones]
DB4[📋 Azure Tables<br/>Auditoría]
end
%% Conexiones principales
A1 --> GA1
A2 --> GA1
A3 --> GA1
A4 --> GA1
GA1 --> DB1
GA2 <--> CF1
GA2 <--> CF2
GA3 <--> DB3
GA4 <--> DB3
GA5 --> CF3
GA6 --> DB4
GA7 --> CF4
GA1 -.-> DB2
%% Estilos
classDef apps fill:#e3f2fd,stroke:#1976d2
classDef gmauth fill:#e8f5e8,stroke:#388e3c
classDef config fill:#f3e5f5,stroke:#7b1fa2
classDef data fill:#fff3e0,stroke:#f57c00
class A1,A2,A3,A4 apps
class GA1,GA2,GA3,GA4,GA5,GA6,GA7 gmauth
class CF1,CF2,CF3,CF4 config
class DB1,DB2,DB3,DB4 data