Updates tutorial for clarity and consistency
Refines the tutorial document by standardizing list formatting, correcting minor typographical errors, and updating outdated references, thereby enhancing readability and ensuring technical accuracy for users setting up the authentication system.
This commit is contained in:
parent
6b351ff5b3
commit
04b7840341
@ -6,21 +6,21 @@ Este tutorial comprensivo explica cómo configurar un sistema de autenticación
|
||||
|
||||
## Índice
|
||||
|
||||
1. [Fundamentos de Autenticación Empresarial](#fundamentos-de-autenticación-empresarial-ldap-keycloak-y-angular)
|
||||
2. [Preparación del entorno](#1-preparación-del-entorno)
|
||||
3. [Instalación y configuración de OpenLDAP](#2-instalación-y-configuración-de-openldap)
|
||||
1. [Fundamentos de Autenticación Empresarial](#fundamentos-de-autenticaci%C3%B3n-empresarial-ldap-keycloak-y-angular)
|
||||
2. [Preparación del entorno](#1-preparaci%C3%B3n-del-entorno)
|
||||
3. [Instalación y configuración de OpenLDAP](#2-instalaci%C3%B3n-y-configuraci%C3%B3n-de-openldap)
|
||||
4. [Crear estructura LDAP para usuarios y grupos](#3-crear-estructura-ldap-para-usuarios-y-grupos)
|
||||
5. [Instalación y configuración de Keycloak](#4-instalación-y-configuración-de-keycloak)
|
||||
6. [Configuración de Keycloak en la interfaz web](#5-configuración-de-keycloak-en-la-interfaz-web)
|
||||
7. [Integración con Angular: Enfoque básico](#6-integración-con-angular-enfoque-básico)
|
||||
8. [Integración con Angular 19: Enfoque moderno](#7-integración-con-angular-19-enfoque-moderno)
|
||||
9. [Servicios de autenticación avanzados](#8-servicios-de-autenticación-avanzados)
|
||||
5. [Instalación y configuración de Keycloak](#4-instalaci%C3%B3n-y-configuraci%C3%B3n-de-keycloak)
|
||||
6. [Configuración de Keycloak en la interfaz web](#5-configuraci%C3%B3n-de-keycloak-en-la-interfaz-web)
|
||||
7. [Integración con Angular: Enfoque básico](#6-integraci%C3%B3n-con-angular-enfoque-b%C3%A1sico)
|
||||
8. [Integración con Angular 19: Enfoque moderno](#7-integraci%C3%B3n-con-angular-19-enfoque-moderno)
|
||||
9. [Servicios de autenticación avanzados](#8-servicios-de-autenticaci%C3%B3n-avanzados)
|
||||
10. [Guardias de ruta e interceptores HTTP](#9-guardias-de-ruta-e-interceptores-http)
|
||||
11. [Componentes de UI para login/logout](#10-componentes-de-ui-para-loginlogout)
|
||||
12. [Arquitectura del sistema](#11-arquitectura-del-sistema)
|
||||
13. [Consideraciones de seguridad y buenas prácticas](#12-consideraciones-de-seguridad)
|
||||
14. [Resolución de problemas comunes](#13-resolución-de-problemas-comunes)
|
||||
15. [Verificación y prueba del sistema](#14-verificación-y-prueba-del-sistema)
|
||||
14. [Resolución de problemas comunes](#13-resoluci%C3%B3n-de-problemas-comunes)
|
||||
15. [Verificación y prueba del sistema](#14-verificaci%C3%B3n-y-prueba-del-sistema)
|
||||
16. [Recursos adicionales](#15-recursos-adicionales)
|
||||
17. [Resumen](#16-resumen)
|
||||
|
||||
@ -55,7 +55,7 @@ Keycloak es una solución de código abierto para gestión de identidad y acceso
|
||||
### Características principales de Keycloak:
|
||||
|
||||
- **SSO (Single Sign-On)**: Permite a los usuarios autenticarse una vez y acceder a múltiples aplicaciones
|
||||
- **Federation de identidades**: Puede integrar múltiples fuentes de usuarios (como LDAP, Active Directory, bases de datos)
|
||||
- **Federación de identidades**: Puede integrar múltiples fuentes de usuarios (como LDAP, Active Directory, bases de datos)
|
||||
- **Autenticación multifactor**: Soporta verificación en dos pasos y otros métodos de autenticación avanzados
|
||||
- **Protocolos estándar**: Implementa OAuth 2.0, OpenID Connect, SAML 2.0
|
||||
- **Administración centralizada**: Interfaz web para gestionar usuarios, roles, permisos y aplicaciones
|
||||
@ -81,24 +81,24 @@ Esta combinación crea una solución robusta donde LDAP almacena los datos de us
|
||||
## Problemas que soluciona esta arquitectura
|
||||
|
||||
### 1. Fragmentación de identidades
|
||||
**Problema**: En organizaciones grandes, es común tener usuarios duplicados en diferentes sistemas.
|
||||
**Solución**: LDAP centraliza la información de usuarios, mientras Keycloak expone estos datos a aplicaciones modernas.
|
||||
|
||||
**Problema**: En organizaciones grandes, es común tener usuarios duplicados en diferentes sistemas. **Solución**: LDAP centraliza la información de usuarios, mientras Keycloak expone estos datos a aplicaciones modernas.
|
||||
|
||||
### 2. Experiencia de usuario deficiente
|
||||
**Problema**: Obligar a los usuarios a iniciar sesión en cada aplicación por separado.
|
||||
**Solución**: Single Sign-On a través de Keycloak permite autenticarse una sola vez para acceder a múltiples aplicaciones.
|
||||
|
||||
**Problema**: Obligar a los usuarios a iniciar sesión en cada aplicación por separado. **Solución**: Single Sign-On a través de Keycloak permite autenticarse una sola vez para acceder a múltiples aplicaciones.
|
||||
|
||||
### 3. Seguridad inconsistente
|
||||
**Problema**: Cada aplicación implementa su propia seguridad, con diferentes estándares y posibles vulnerabilidades.
|
||||
**Solución**: Keycloak implementa prácticas de seguridad modernas de forma centralizada.
|
||||
|
||||
**Problema**: Cada aplicación implementa su propia seguridad, con diferentes estándares y posibles vulnerabilidades. **Solución**: Keycloak implementa prácticas de seguridad modernas de forma centralizada.
|
||||
|
||||
### 4. Dificultad para implementar autenticación robusta
|
||||
**Problema**: Implementar OAuth2, OpenID Connect o SAML desde cero es complejo y propenso a errores.
|
||||
**Solución**: Keycloak proporciona estas implementaciones listas para usar.
|
||||
|
||||
**Problema**: Implementar OAuth2, OpenID Connect o SAML desde cero es complejo y propenso a errores. **Solución**: Keycloak proporciona estas implementaciones listas para usar.
|
||||
|
||||
### 5. Gestión compleja de accesos
|
||||
**Problema**: Administrar quién puede acceder a qué recursos en múltiples aplicaciones.
|
||||
**Solución**: Roles y grupos centralizados que se aplican consistentemente en todas las aplicaciones.
|
||||
|
||||
**Problema**: Administrar quién puede acceder a qué recursos en múltiples aplicaciones. **Solución**: Roles y grupos centralizados que se aplican consistentemente en todas las aplicaciones.
|
||||
|
||||
## Arquitectura general de la solución
|
||||
|
||||
@ -118,6 +118,7 @@ Esta combinación crea una solución robusta donde LDAP almacena los datos de us
|
||||
| (Recursos) |
|
||||
| |
|
||||
+-------------------+
|
||||
|
||||
```
|
||||
|
||||
1. **OpenLDAP** actúa como almacén principal de usuarios y grupos
|
||||
@ -193,7 +194,6 @@ Durante la instalación, se te pedirá configurar una contraseña de administrad
|
||||
sudo dpkg-reconfigure slapd
|
||||
```
|
||||
|
||||
|
||||
En la configuración:
|
||||
|
||||
1. "¿Omitir configuración del servidor LDAP?" → No
|
||||
@ -213,14 +213,13 @@ En la configuración:
|
||||
|
||||

|
||||
|
||||
|
||||
### Verificar que LDAP se esté ejecutando correctamente
|
||||
|
||||
```bash
|
||||
sudo systemctl status slapd
|
||||
```
|
||||

|
||||
|
||||

|
||||
|
||||
### Comprobar la conexión LDAP básica
|
||||
|
||||
@ -248,9 +247,8 @@ Busca y modifica las siguientes líneas:
|
||||
$servers->setValue('server','base',array('dc=correos,dc=com'));
|
||||
$servers->setValue('login','bind_id','cn=admin,dc=correos,dc=com');
|
||||
```
|
||||

|
||||

|
||||
|
||||
 
|
||||
|
||||
Y cambia descomenta y cambia esta línea:
|
||||
|
||||
@ -264,9 +262,7 @@ por:
|
||||
$servers->setValue('login','anon_bind',false);
|
||||
```
|
||||
|
||||

|
||||

|
||||
Reinicia el servidor web:
|
||||
  Reinicia el servidor web:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart apache2
|
||||
@ -336,12 +332,14 @@ ldapadd -x -D cn=admin,dc=correos,dc=com -W -f ~/grupos.ldif
|
||||
### Crear usuarios LDAP
|
||||
|
||||
Primero, genera contraseñas encriptadas para los usuarios:
|
||||
> Aca usaremos la misma contraseña para todos los usuarios para temas practicos
|
||||
|
||||
> Aquí usaremos la misma contraseña para todos los usuarios para temas prácticos
|
||||
|
||||
```bash
|
||||
slappasswd -s "password123"
|
||||
```
|
||||

|
||||
Anota el hash resultante para usarlo en el siguiente archivo.
|
||||
|
||||
 Anota el hash resultante para usarlo en el siguiente archivo.
|
||||
|
||||
Crea un archivo para los usuarios:
|
||||
|
||||
@ -430,6 +428,7 @@ dn: cn=usuarios,ou=grupos,dc=correos,dc=com
|
||||
changetype: modify
|
||||
add: memberUid
|
||||
memberUid: user
|
||||
|
||||
```
|
||||
|
||||
Aplica los cambios:
|
||||
@ -468,13 +467,13 @@ sudo useradd -r -s /sbin/nologin keycloak
|
||||
# Asignar permisos
|
||||
sudo chown -R keycloak:keycloak /opt/keycloak
|
||||
```
|
||||
|
||||
## Configurar usuario administrador inicial para Keycloak
|
||||
|
||||
Crea un archivo de propiedades:
|
||||
|
||||
```bash
|
||||
sudo nano /opt/keycloak/conf/keycloak.conf
|
||||
|
||||
```
|
||||
|
||||
Agrega estas líneas:
|
||||
@ -489,7 +488,6 @@ http-enabled=true
|
||||
|
||||
# Configuración de administrador inicial
|
||||
http-enabled=true
|
||||
|
||||
```
|
||||
|
||||

|
||||
@ -499,7 +497,6 @@ http-enabled=true
|
||||
```bash
|
||||
cd /opt/keycloak
|
||||
sudo -u keycloak /opt/keycloak/bin/kc.sh bootstrap-admin user --username admin
|
||||
|
||||
```
|
||||
|
||||
En este comando preguntará para crear la contraseña del usuario "admin" que usaremos como administrador.
|
||||
@ -510,7 +507,6 @@ Sin hacer cd, corremos el siguiente comando:
|
||||
|
||||
```bash
|
||||
sudo -u keycloak bin/kc.sh start-dev
|
||||
|
||||
```
|
||||
|
||||
## Iniciar Keycloak en modo productivo
|
||||
@ -564,14 +560,14 @@ sudo systemctl status keycloak
|
||||
|
||||
> **Nota**: si quieres ver el log del servicio usa el comando `sudo journalctl -u keycloak -f`
|
||||
|
||||
## Configuración de Keycloak en la interfaz web
|
||||
## 5. Configuración de Keycloak en la interfaz web
|
||||
|
||||
Ahora puedes acceder a la consola de administración de Keycloak en http://192.168.1.27:8080/admin/ e iniciar sesión con:
|
||||
|
||||
- Usuario: `admin`
|
||||
- Contraseña: la que configuraste anteriormente
|
||||
|
||||
> No necesariamente es ese login siempre, todo depende de qué usuario crearon anteriormente y su contraseña ademas de la IP del servidor.
|
||||
> No necesariamente es ese login siempre, todo depende de qué usuario crearon anteriormente y su contraseña además de la IP del servidor.
|
||||
|
||||

|
||||
|
||||
@ -625,8 +621,6 @@ Ahora puedes acceder a la consola de administración de Keycloak en http://192.1
|
||||
|
||||
6. En la pantalla del proveedor LDAP, ve a la pestaña "Synchronization"
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
7. Haz clic en "Sync all users"
|
||||
@ -694,6 +688,7 @@ Ahora puedes acceder a la consola de administración de Keycloak en http://192.1
|
||||

|
||||
|
||||
4. En la siguiente pantalla (para aplicaciones SPA modernas):
|
||||
|
||||
- Client authentication: `OFF` (para aplicaciones SPA)
|
||||
- Authorization: `OFF`
|
||||
- Marca la casilla "Direct access grants"
|
||||
@ -701,6 +696,7 @@ Ahora puedes acceder a la consola de administración de Keycloak en http://192.1
|
||||
|
||||
> **Importante**: La opción "Direct access grants" es esencial ya que permite realizar la autenticación directamente desde el cliente Angular mediante peticiones POST (enviando usuario y contraseña), sin necesidad de redirigir al usuario a través de la interfaz de inicio de sesión de Keycloak.
|
||||
|
||||
|
||||

|
||||
|
||||
5. En la siguiente pantalla:
|
||||
@ -714,10 +710,10 @@ Ahora puedes acceder a la consola de administración de Keycloak en http://192.1
|
||||

|
||||
|
||||
|
||||
> **Nota**: Para aplicaciones que no son SPA, puedes habilitar "Client authentication" y obtener un client secret que deberás usar en la configuración.
|
||||
> **Nota**: Puedes descargar un ejemplo de una maquina virtual de virtual box en el siguiente [enlace](https://valposystemscom-my.sharepoint.com/:u:/g/personal/luis_cespedes_valposystems_com/EepH0pHrk8ZEgeU-RmVkopgBiN6LWoPm6P8MJEzt-qdxXw?e=IZFMMg) con todo ya configurado , solo importar y usar
|
||||
> **Nota**: Para aplicaciones que no son SPA, puedes habilitar "Client authentication" y obtener un client secret que deberás usar en la configuración. **Nota**: Puedes descargar un ejemplo de una máquina virtual de VirtualBox en el siguiente [enlace](https://valposystemscom-my.sharepoint.com/:u:/g/personal/luis_cespedes_valposystems_com/EepH0pHrk8ZEgeU-RmVkopgBiN6LWoPm6P8MJEzt-qdxXw?e=IZFMMg) con todo ya configurado, solo importar y usar.
|
||||
|
||||
## Configurar cliente para incluir grupos
|
||||
|
||||
**Añadir un Protocol Mapper en el cliente de Keycloak:** a. Inicia sesión en la consola de administración de Keycloak b. Navega a "Clients" > selecciona tu cliente "angular-app" c. Ve a la pestaña "Client Scopes" > Selecciona el scope por defecto (normalmente es el nombre del cliente) d. Ve a la pestaña "Mappers" e. Haz clic en "Create" o "Add Mapper" y selecciona "Group Membership" f. Configura el mapper con los siguientes valores:
|
||||
|
||||
- Name: groups
|
||||
@ -733,18 +729,13 @@ Alternativamente, puedes crear un mapper de tipo "User Attribute" si prefieres a
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Que logramos con esto ? facil , que en el accestoken aparezcan los grupos que pertenece el usuario , tal cual lo configuramos en ldap, esto puede ayudar para crear politicas de acceso a paginas o rutas protegidas para algun grupo en especifico mas adelante
|
||||

|
||||
|
||||
|
||||
¿Qué logramos con esto? Fácil: que en el access token aparezcan los grupos a los que pertenece el usuario, tal cual los configuramos en LDAP. Esto puede ayudar para crear políticas de acceso a páginas o rutas protegidas para algún grupo en específico más adelante. 
|
||||
|
||||
## 11. Arquitectura del sistema
|
||||
|
||||
@ -779,7 +770,6 @@ El flujo de autenticación funciona de la siguiente manera:
|
||||
6. Los interceptores HTTP añaden automáticamente el token a las peticiones API
|
||||
7. Las rutas protegidas verifican los roles del usuario antes de permitir el acceso
|
||||
|
||||
|
||||
## 12. Consideraciones de seguridad
|
||||
|
||||
Al implementar este sistema de autenticación en un entorno de producción, es crucial tener en cuenta diversas consideraciones de seguridad:
|
||||
@ -962,17 +952,19 @@ Si ves redirecciones constantes entre tu aplicación y Keycloak:
|
||||
Si encuentras este error al compilar:
|
||||
|
||||
1. Asegúrate de haber instalado correctamente las dependencias:
|
||||
|
||||
```bash
|
||||
npm install keycloak-angular keycloak-js
|
||||
```
|
||||
|
||||
2. Verifica que las versiones sean compatibles con tu versión de Angular
|
||||
3. Limpia la caché de npm y reinstala:
|
||||
|
||||
```bash
|
||||
npm cache clean --force
|
||||
rm -rf node_modules
|
||||
npm install
|
||||
npm cache clean --forcerm -rf node_modulesnpm install
|
||||
```
|
||||
|
||||
|
||||
### Problema: El token no se adjunta a las peticiones HTTP
|
||||
|
||||
1. Verifica que estés utilizando el interceptor correcto
|
||||
@ -1038,6 +1030,7 @@ En este tutorial comprensivo, hemos explorado la implementación de un sistema d
|
||||
|
||||
- **Flexibilidad**: La capacidad de federación de identidades de Keycloak facilita la integración con sistemas existentes y la migración gradual.
|
||||
|
||||
|
||||
### Aplicaciones prácticas:
|
||||
|
||||
Esta arquitectura es particularmente valiosa en:
|
||||
@ -1061,8 +1054,6 @@ El ecosistema moderno de autenticación está en constante evolución, pero esta
|
||||
|
||||
Con la configuración y conocimientos adquiridos en este tutorial, estarás bien posicionado para implementar y mantener un sistema de autenticación empresarial robusto, seguro y centrado en el usuario.
|
||||
|
||||
---
|
||||
|
||||
*Nota final: Recuerda que la seguridad es un proceso continuo, no un estado. Mantén todos los componentes actualizados y revisa regularmente las configuraciones y políticas de seguridad para adaptarte a nuevas amenazas y requisitos.*
|
||||
|
||||
----------
|
||||
|
||||
_Nota final: Recuerda que la seguridad es un proceso continuo, no un estado. Mantén todos los componentes actualizados y revisa regularmente las configuraciones y políticas de seguridad para adaptarte a nuevas amenazas y requisitos._
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user