Este proyecto implementa una Sistema de autenticación híbrida robusta para aplicaciones web desarrolladas con Streamlit. Esta arquitectura garantiza que usuarios con cuentas corporativas o personales de Google accedan sin fricciones, mientras que aquellos sin cuentas externas utilicen un sistema de autenticación local.
CAPÍTULO 1: MARCO ESTRATÉGICO Y CONCEPTUAL
1.1 Resumen del Proyecto
Guía técnica para implementar un sistema de autenticación dual (local/OAuth) en Streamlit, integrando PostgreSQL para la persistencia de usuarios y Google OAuth 2.0 para acceso externo, garantizando seguridad y trazabilidad.
1.2 Introducción y Objetivos
1.2.1. Objetivo del Proyecto
Desarrollar una solución de autenticación modular que permita asegurar el acceso a aplicaciones, facilitando el ingreso de usuarios mediante métodos híbridos validados contra una base de datos centralizada.
1.2.2. ¿Qué problema resuelve el Proyecto?
Resuelve la fragmentación de accesos al unificar, bajo una misma plataforma, usuarios locales (base de datos) y externos (Google), eliminando la necesidad de gestionar múltiples sistemas de credenciales independientes.
1.3 Alcance y Limitaciones (Fronteras Operativas)
1.3.1. Qué HACE la Solución (Alcance)
Valida credenciales locales usando hashes bcrypt, gestiona el flujo completo de OAuth 2.0 con Google, realiza aprovisionamiento automático de usuarios (JIT) y protege rutas privadas en el dashboard.
1.3.1. Qué NO HACE la Solución (Limitaciones Críticas)
No incluye gestión avanzada de roles o permisos (RBAC), recuperación de contraseñas vía correo electrónico, ni cifrado en reposo para la base de datos (se requiere configuración de infraestructura externa).
CAPITULO 2: DIAGRAMA DE ARQUITECTURA
2.1. Principales componentes
La arquitectura se organiza en capas jerárquicas que separan la interfaz de usuario, la lógica de negocio y persistencia.
- Frontend (Streamlit): Capa de presentación que gestiona la interacción del usuario.
- Capa Autenticación: Lógica de validación de hashes y gestión de tokens OAuth.
- Capa Datos: Interfaz de conexión segura mediante
psycopg2hacia el repositorio. - Base Datos (PostgreSQL): Almacenamiento persistente de usuarios y estados de credenciales.
2.2. Arquitectura de la Solución
Este proyecto implementa una solución de autenticación híbrida robusta para aplicaciones web desarrolladas con Streamlit, resolviendo la necesidad de gestionar accesos de forma flexible y segura. El sistema permite dos métodos de validación: mediante credenciales almacenadas localmente en una base de datos PostgreSQL, protegidas con algoritmos de hashing, y mediante el protocolo OAuth 2.0 integrado con Google Identity.
Los usuarios con cuentas corporativas o personales de Google accedan sin fricciones, mientras que aquellos sin cuentas externas utilicen un sistema de autenticación local. En conjunto, esta solución proporciona una puerta de enlace escalable, segura y centralizada para proteger el contenido privado de cualquier panel administrativo.
2.3. Stack de tecnología (Tech Stack)
Este conjunto de herramientas asegura el rendimiento, seguridad y alta compatibilidad en el ecosistema de Python moderno.
| Capa Arquitectónica | Tecnología / Herramienta | Versión / Componente | Propósito Operativo en el Código |
|---|---|---|---|
| Presentación | Streamlit | 1.x+ | Renderizado de UI y estados de sesión |
| Autenticación | Authlib | 1.3.x | Implementación protocolo OAuth 2.0 |
| Seguridad | Bcrypt/Hasher | 0.4.2 | Hashing y verificación de contraseñas |
| Persistencia | PostgreSQL | 15.x | Almacenamiento centralizado de usuarios |
| Integración | Psycopg2 | 2.9.x | Conectividad Python a Postgres |
2.4. Requerimientos No Funcionales (RNF)
2.1.1. Escalabilidad
La arquitectura permite desacoplar el servicio de autenticación hacia un microservicio independiente (ejemplo: Keycloak o Auth0) sin modificar drásticamente la lógica del Dashboard en el futuro.
Integrar Auth0 como Proveedor de Identidad (IdP) en Keycloak permite delegar la autenticación de los usuarios a Auth0. El proceso consiste en registrar Keycloak en Auth0 como una Aplicación (OIDC), y luego configurar Auth0 como un IdP externo en la consola de administración de Keycloak
2.1.2 Disponibilidad y Rendimiento
La validación se realiza mediante conexiones eficientes a la base de datos, mientras que el uso de cookies y sesiones (State Management) minimiza la latencia en cada navegación.
CAPÍTULO 3: APIS, INTEGRACION Y VALIDACION
3.1 Lista de APIs aplicados en la solución
- Google OAuth2 API: Gestiona el protocolo de autorización y obtención del perfil de usuario remoto.
- Google UserInfo API: Endpoint que retorna los datos básicos del usuario autenticado tras validar token.
Mecanismo de Integración: Se integra mediante Authlib para realizar el intercambio de códigos de autorización por tokens de acceso mediante peticiones HTTP seguras.
3.2. Validación en la Integración
Se validan credenciales locales contra hashes y tokens de Google contra la base de datos para asegurar el acceso autorizado.
CAPÍTULO 4: CODIGO DEL PROYECTO
4.1. Estructura del Proyecto
| Item | Nombre | Integración (SI/NO) | Funcionalidad |
|---|---|---|---|
| 1 | app.py | SI | Lógica principal de login y OAuth |
| 2 | db_connector.py | SI | Conexión y consultas a PostgreSQL |
| 3 | pages/dashboard.py | SI | Interfaz de contenido privado |
| 4 | .env | SI | Almacenamiento de credenciales seguras |
Configuración Google OAuth 2.0:
- Crear proyecto en Google Cloud Console.
- Configurar pantalla de consentimiento (OAuth externo).
- Crear credenciales ID de cliente (tipo App Web).
- Configurar URI de redireccionamiento a
http://localhost:8501/.
4.2. Dependencias según el archivo dependencias.sh
| Items | Dependencia | Funcionalidad en el código |
|---|---|---|
| 1 | Streamlit | UI del portal y dashboard |
| 2 | Authlib | Gestión de protocolos OAuth |
| 3 | Psycopg2-binary | Conector de base de datos |
| 4 | Python-dotenv | Carga de variables de entorno |
4.3. Configuración e instalación
- Bash / Linux / iOS:
pip install -r requirements.txt(o ejecutarbash dependencias.sh). - PowerShell:
pip install streamlit authlib psycopg2-binary python-dotenv requests.
4.4. Guía de Ejecución
- Configurar variables en
.env. - Crear tabla
usuariosen Postgres. - Ejecutar
streamlit run app.pyen la terminal.
RESUMEN
La introducción describe el problema resuelto mediante autenticación híbrida y segura. El marco estratégico define objetivos, alcances y limitaciones del sistema implementado. La arquitectura de componentes organiza lógicamente la interacción mediante capas tecnológicas definidas. Las APIs facilitan la integración externa y el flujo de validación segura. El despliegue detalla la configuración técnica, dependencias y pasos para su ejecución.
Proyecto elaborado por Hadson Paredes - 2026
- Repositorio Streamlit-Hybrid-Auth
- Disponible como curso en Hadson.Tech
0 Comentarios