Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Profesor
JOSE CASTRO
Para crear un sistema informático de tipo SSO (single sign-on), que permite un inicio de sesión y
perfilamiento centralizado, usando como usuario los correos corporativos de la empresa y su
modelo de autenticación, se identifican los siguientes requisitos.
Seguridad:
Autenticación:
Autorización:
Integración:
2
Interfaz de Usuario:
Escalabilidad:
Notificaciones y Alertas:
Documentación:
● Documentación clara y completa que describa la arquitectura, los requisitos del sistema y
los procedimientos de implementación.
● Manuales de usuario y administrador para facilitar el uso y la administración del sistema.
Pruebas:
Cumplimiento Normativo:
3
2. DISEÑO RÁPIDO
La plataforma estará compuesta por varios módulos: aplicaciones, roles, permisos y usuarios,
contará con un módulo de reportes y conexión al modelo de BI de la organización para generar
data analítica.
El sistema, en el módulo usuario, deberá permitir la validación de usuarios con el directorio activo
de la empresa
El sistema deberá permitir que los usuarios puedan acceder a las aplicaciones de acuerdo a los
permisos que tengan.
Los usuarios deben autenticarse una vez a cada aplicación a la que tengan permisos.
Si el usuario ingresa la contraseña errónea a la aplicación, el sistema debe volver a pedirle la
contraseña.
Usuario autenticarse a las aplicaciones, las credenciales deben ser encriptadas bajo algún
algoritmo para aumentar la seguridad.
Un control de acceso basado en roles (RBAC) define el acceso en forma de roles y sus tareas
asociadas. Un rol es un conjunto de derechos y capacidades que definen lo que un usuario
puede hacer. Puede pensar en roles como filtros: agrega usuarios a los roles para aplicar
permisos. Por ejemplo, un rol de Cuentas por cobrar tendrá acceso a herramientas y datos de
cuentas por cobrar, mientras que un rol de Cuentas por pagar no lo tendrá.
Hay dos enfoques en los que puede modelar RBAC: central o jerárquico.
RBAC central
Core RBAC está diseñado mediante la definición de roles: grupos de usuarios con características
comunes. Designa tareas específicas para cada rol definido por el usuario, lo que permite a los
4
usuarios realizar diferentes tareas en función de su(s) rol(es) asignado(s). Un administrador
específico es responsable de definir usuarios, roles y permisos.
En un diseño basado en modelos, puede usar entidades de base de datos para representar
roles, permisos, usuarios y sus asociaciones relacionadas.
5
En la figura anterior, puede ver que las principales entidades que participan en el modelado
RBAC incluyen las siguientes:
6
Construcción de una API en Node.js para autenticación utilizando Express y Passport, dos
bibliotecas populares para construir aplicaciones web en Node.js y gestionar la autenticación.
Instalación de dependencias
Asegúrate de tener Node.js y npm instalados. Luego, crea un nuevo proyecto y agrega las
dependencias necesarias:
bash
Copy code
npm init -y
npm install express passport passport-local passport-jwt jsonwebtoken bcrypt
app.use(express.json());
app.use(passport.initialize());
app.listen(PORT, () => {
console.log(`Servidor escuchando en el puerto ${PORT}`);
});
Este código configura Passport con una estrategia local (usuario/contraseña) y una estrategia
JWT. Las rutas /login y /protected están protegidas por autenticación.
Implementa las funciones para conectar a tu base de datos y validar las credenciales en la
estrategia local.
8
Mejoras y Seguridad:
INTERFAZ
9
10
4. EVALUACIÓN
Seguridad:
Pruebas de Penetración: Realiza pruebas de penetración para identificar posibles
vulnerabilidades y asegurarte de que el sistema sea resistente a ataques.
Cifrado: Verifica que la comunicación entre los componentes esté cifrada de manera adecuada.
Manejo de Contraseñas: Evalúa la seguridad en el almacenamiento y manejo de contraseñas,
asegurándote de que se utilicen técnicas seguras como el hash de contraseñas.
Funcionalidad:
Autenticación:
Verifica que el sistema autentique a los usuarios de manera efectiva utilizando diferentes
métodos, como contraseñas, autenticación de dos factores, etc.
11
Autorización:
Asegúrate de que el sistema otorgue acceso adecuado basado en roles y permisos asignados.
Interoperabilidad:
Integración:
Comprueba la capacidad del sistema para integrarse con otros sistemas de información de
manera eficiente.
Estándares: Asegúrate de que el software cumple con estándares de la industria para la
interoperabilidad.
Usabilidad:
Interfaz de Usuario: Evalúa la interfaz de usuario para asegurarte de que sea intuitiva y fácil de
usar, especialmente en la administración de usuarios y permisos.
Experiencia del Usuario: Considera la experiencia general del usuario durante el proceso de
autenticación.
Rendimiento:
Pruebas de Rendimiento: Realiza pruebas para evaluar el rendimiento del sistema bajo cargas
de trabajo variables.
Escalabilidad:
Verifica la capacidad del sistema para escalar y manejar un crecimiento en el número de
usuarios.
5. REFINAMIENTO
https://api-auth.bancointernacional.com.ec/swagger/#!/External/ApiExtClaimsPost
Este ejemplo de swagger es expuesto por el banco internacional de ecuador y es usado por los
desarrolladores que tengan procesos de integración con la entidad, es una buena práctica usar
versionamiento sobre el swagger para poder tener todo el tracking de los cambios en métodos y
contratos que normalmente tienen un API.
● ReactJS.
Es una librería open source de JavaScript para desarrollar interfaces de usuario. Fue lanzada en
el año 2013 y desarrollada por Facebook, quienes también la mantienen actualmente junto a una
comunidad de desarrolladores independientes y compañías.
Hoy en día muchas empresas de primer nivel utilizan React para el desarrollo de sus
aplicaciones, y es que entre ellas podemos encontrar Facebook, Instagram y el cliente web de
WhastApp (todas propiedad de Facebook), y otras como AirBnb, Uber, Netflix, Twitter, Reddit o
Paypal.
React JS es hoy en día una de las librerías más usadas a nivel de front en Colombia, esto
basado para mi en los siguientes puntos:
- Es la evolución natural de los desarrolladores que venimos de tecnologías .net como asp
o C#, al dar el mismo manejo MVC a nivel de patrón de arquitectura.
- La posibilidad de poder saltar a Reac Native y generar aplicaciones móviles
multiplataforma.
- La gran cantidad de plugins y librerías de terceros, gracias a la gran comunidad de
desarrollo que lo soporta.
13
● Hooks (useState, useContext, useEffect, useReducer).
Los Hooks son una nueva incorporación en React 16.8. Le permiten usar el estado y otras
características de React sin escribir una clase.
Más fácil de probar: aunque no tiene tanta influencia en los proyectos personales como en las
aplicaciones implementadas públicamente y de alta disponibilidad, las pruebas son una parte
vital del ciclo de vida de desarrollo de software de cualquier organización. Ya sea que se
presente en forma de servicios de integración/desarrollo continuo como CircleCI o TravisCI o
directamente de probar la funcionalidad individual con bibliotecas como Jest o Selenium, los
enlaces hacen que probar los componentes de React.js sea mucho más fácil que si estuvieran
basados en clases.
Más fácil de leer: esto es especialmente útil para proyectos con muchos miembros del equipo.
Aunque uno puede suponer que hay lenguajes de diseño, métodos y guías de estilo particulares
que un equipo podría seguir con respecto a cómo construir la interfaz de usuario, eliminar la
grasa de una arquitectura de componentes basada en clases permite a los ingenieros volver a
escribir programas que se sientan en el núcleo del lenguaje JavaScript en lugar de abstraer
cosas innecesariamente.
Más cerca del JavaScript tradicional: como se mencionó anteriormente, escribir componentes
funcionales reduce la escritura de "funciones especiales" (clases) en JavaScript. No es que
escribir componentes basados en clases en JavaScript sea algo malo, ya que JavaScript
técnicamente se puede usar como un lenguaje orientado a objetos debido a su enfoque
multiparadigma, pero se debe a la forma en que JavaScript maneja las clases y el objeto que se
instancia a partir de tales declaraciones de clase. Aquí es donde entran en juego los patrones y
principios subyacentes de JavaScript, como la cadena de prototipos y la herencia, que aunque
no están cubiertas en el alcance de este artículo, son características muy importantes de
JavaScript para conocer. Otra cosa es que si usa componentes basados en clases, siempre tiene
14
que extenderse desde una clase React.js incorporada, mientras que los componentes
funcionales son funciones de JavaScript puras donde React.js reconoce el JSX y los ganchos a
través de importaciones.
Menos código intensivo: esto también podría caer bajo el mismo paraguas que "Más fácil de
leer", pero mi intuición me dice que divida esto en su propio punto basado en un paradigma en
ingeniería de software que he mencionado anteriormente; abstracción. Aunque normalmente
tiene que cambiar algo de rendimiento por la implementación de la abstracción, es el oxígeno el
que alimenta la evolución de un producto la mayoría de las veces. Tomar algo, en nuestro código
de caso, que alguna vez fue intrincado, de escasa capacidad y duplicado en muchas instancias y
convertirlo en una solución que es más fácil de implementar, ofrece una mejor experiencia de
ingeniería en general y produce lo mismo, si no más favorable, enfoque que iteraciones
anteriores es la tesis detrás del ciclo de vida de cualquier producto. React.js no es una
excepción.
● Context API.
La API de contexto de React es una forma en que una aplicación de React produce de manera
efectiva variables globales que se pueden pasar. El contexto también se promociona como un
enfoque más fácil y ligero para la gestión del estado utilizando Redux.
La API de contexto es una característica nueva agregada en la versión 16.3 de React que
permite compartir el estado en toda la aplicación (o parte de ella) de forma ligera y sencilla.
Axios es una librería cliente HTTP basada en promesas que se puede usar tanto en Node JS
como en el navegador; por lo que podremos configurar y realizar solicitudes a un servidor y
recibiremos respuestas fáciles de procesar.
Nos ayuda en el envío de peticiones asíncronas HTTP, así ayudándonos a realizar las
operaciones CRUD. 15
Normalmente Axios es la librería estándar en javascript para construir proxy, generar peticiones y
materializar la data de respuesta al trabajar aplicaciones cliente web y servidor servidor rest, con
Axios podemos realizar peticiones HTTP básicas (GET, POST, PUT, DELETE) siempre
respetando el estándar html, de trabajar los contratos en formato JSON y manejar los estados de
respuesta HTTP y ss headers de seguridad.
● Rutas y navegación.
Gracias a la librería react-router-dom, podemos crear rutas fijas, por ejemplo, para mostrar
formularios, listas o tablas de datos, entre otros. También podemos crear rutas dinámicas, para
mostrar los datos de un cliente específico, un producto identificado, alguna orden o contrato, etc.
Así, podremos ir extendiendo la lista anterior, con problemáticas comunes entre una aplicación y
otra, para ir consolidando hooks y demás componentes reutilizables de un proyecto a otro.
16
6. ENTREGA
En el siguiente github presentó la versión mvp del sistema con funcionalidades de CRUD,
autenticación, autorización y persistencia.
https://github.com/wgarcia43/logapp
7. DIAGRAMA DE CLASES
Usuario:
SistemaSSO:
Sesion:
18
19
8. DICCIONARIO DE DATOS
Entidad: Usuario
Descripción: Representa a un usuario registrado en el sistema.
Atributos:
idUsuario (identificador único del usuario)
nombreUsuario (nombre de usuario único)
contrasena (contraseña del usuario)
Métodos:
autenticar(): Método utilizado durante el proceso de inicio de sesión.
Proveedor:
Entidad: Proveedor
Descripción: Representa un proveedor de servicios externo que participa en el SSO.
Atributos:
idProveedor (identificador único del proveedor)
nombreProveedor (nombre del proveedor)
urlAutenticacion (URL de autenticación del proveedor)
Métodos:
autenticar(): Método que realiza la autenticación del usuario y devuelve una sesión.
Sesion:
Entidad: Sesion
Descripción: Representa una sesión activa después de una autenticación exitosa.
Atributos:
idSesion (identificador único de la sesión)
usuario (referencia al Usuario asociado)
20
fechaInicio (fecha y hora de inicio de la sesión)
fechaExpiracion (fecha y hora de expiración de la sesión)
Métodos:
No hay métodos definidos en el diccionario, pero podría haber métodos para gestionar la sesión.
SistemaSSO:
Entidad: SistemaSSO
Descripción: Representa el sistema central de Single Sign-On.
Atributos:
proveedores (lista de proveedores externos)
sesiones (lista de sesiones activas)
Métodos:
autenticar(usuario, proveedor): Método que autentica a un usuario con un proveedor externo y
devuelve una sesión.
cerrarSesion(sesion): Método que cierra una sesión activa.
9. VIDEO
https://www.youtube.com/watch?v=n40fOiIGdyA
21
BIBLIOGRAFÍA
22