Keycloak es la autoridad

Las contraseñas, la verificación y la recuperación permanecen en Keycloak. ChainsFlow valida el JWT Bearer de Keycloak sin crear otra identidad.

El subject es el ID

El subject UUID se almacena como users.id y se referencia desde user_portfolios. No hace falta una tabla de sesiones propia.

Los planes siguen siendo locales

ChainsFlow conserva las cuotas Free/Pro y la suscripción Stripe porque son reglas del producto.