1. INTRODUCCIÓN
WSO2 API Manager
WSO2 API Manager es una solución de gestión de ciclo de vida completo de API, es 100% de código abierto y provee principalmente las siguientes funcionalidades a los servicios de la empresa:
-
Seguridad: Exige tokens de ejecución compatibles con standard OAuth2.
-
Control de Flujo: Valida cuotas de ejecución de APIs definidas a múltiples niveles.
-
Analíticas: Almacena eventos, lanza alertas en tiempo real y realiza análisis batch para cuadros de consulta de indicadores clave.
-
Facilidad de Publicación: Aplicación de Gestión del ciclo de vida completo de API
-
Facilidad de Consumo: Aplicación de Tienda de APIs con herramientas para fomento de la comunidad de desarrolladores.
Desde el punto de vista arquitectónico está conformado por los siguientes componentes:
-
Publisher (Backoffice Application): Aplicación de publicación de APIs.
-
Developer Portal (The API marketplace): Aplicación de consumo de APIs.
-
Gateway (API runtime): Componente que verifica condiciones y envía la petición al backend.
-
Key Manager (API key management): Componente de validación de token.
-
Analytics (API Analytics & alerts): Componente de recepción de eventos y análisis.
-
Traffic Manager (API throttling & traffic management): Componente de validación de cuotas de ejecución.
El siguiente diagrama muestra de una manera básica la relación entre componentes:
Keycloak
Keycloak es un producto de software de código abierto que pone a disposición de aplicaciones y servicios las siguientes funcionalidades:
- Inicio de sesión única (basado en SAML2 u OpenId)
- Gestión de identidades
- Gestión de acceso
Actualmente este proyecto de la comunidad JBoss está bajo la dirección de Red Hat, que lo utiliza como el proyecto inicial para su producto RH-SSO.
2.Integración
Como Proveedor de Identidades, Keycloak puede ser integrado con los productos WSO2 AM y WSO2 IS.
Existen dos alternativas para realizar esta integración, cada una con diferentes características:
Como Proveedor de Identidades Federado (Federated Identity Provider):
- No requiere desarrollo Java
- WSO2 AM funciona como Gestor de Claves (El token es generado y gestionado por WSO2 AM)
- La autenticación es gestionada por Keycloak
- La autorización es gestionada por WSO2 AM (Los roles se gestionan en WSO2 AM)
Como Gestor de Claves de Terceros (Third Party Key Manager):
-
Requiere desarrollo Java implementando las interfaces KeyManager y KeyValidator
-
Keycloak funciona como gestor de claves (El token es generado y gestionado por Keycloak)
-
La autenticación es gestionada por Keycloak
-
La autorización es gestionada por Keycloak (Los roles se gestionan en Keycloak)
La siguiente tabla resume las diferencias entre los dos enfoques:
Tipo de Integración |
Requiere desarrollo Java |
Gestión de Tokens |
Gestión de Autenticación |
Gestión de Autorización |
---|---|---|---|---|
Proveedor de Identidades Federado |
No |
WSO2 AM |
Keycloak |
WSO2 AM(*) |
Gestor de Claves de Terceros |
Si |
Keycloak |
Keycloak |
Keycloak |
*Si se desea delegar también la autorización en Keycloak un desarrollo Java menor es requerido extendiendo a la clase OAuth2ScopeValidator
Dependiendo de los requerimientos del proyecto se seleccionará el enfoque correspondiente.
A continuación se detallan los pasos para un laboratorio de integración entre WSO2 AM y Keycloak como Proveedor de Identidades Federado.
3. Requisitos
Docker
En el artículo se utilizarán imágenes docker de WSO2 AM y Keycloak para evitar instalaciones innecesarias.
La información para instalar el motor docker en la plataforma deseada se encuentra en el siguiente link https://docs.docker.com/engine/install/
4. Configuración de Docker
Es necesario crear una red puente entre los dos contenedores para que puedan comunicarse, esto se puede realizar ejecutando el siguiente snippet en una terminal:
docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 wso2am-keycloak-net
5. Configuración de Keycloak
Instalación de Keycloak
Se puede arrancar un servidor Keycloak de forma rápida ejecutando el siguiente snippet en una terminal:
docker run --ip 172.18.0.3 --add-host keycloak:172.18.0.3 --add-host wso2am:172.18.0.2 --net wso2am-keycloak-net -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=keycloak -e DB_VENDOR=h2 -ti -p 8080:8080 --name keycloak jboss/keycloak:9.0.3
Para verificar la instalación acceder a la consola http://localhost:8080 e informar las credenciales admin/keycloak.
En la pantalla de login informar las credenciales admin/keycloak.
Creación del cliente
Acceder a la consola y crear un cliente en el realm por defecto
Establecer los siguientes datos:
-
Client Id -> wso2apim
-
Protocol -> openid-connect
-
Root URL -> https://localhost:9443/commonauth
Cambiar el tipo de acceso a confidencial para crear un client-secret en la sección de Settings:
-
Access Type → confidential
Guardar la configuración.
En la sección de Credentials:
-
Registrar el secret creado en esta sección de credentials (por ejemplo 6fa37d08-80e7-4564-9fd3-513734a6ffbc) para ser utilizado en la configuración de WSO2 AM
Actualización del scope profile
Keycloak devuelve por defecto los scopes “profile email” pero ninguno de estos devuelve el claims “groups” que es necesario para que WSO2 AM permita el acceso al Developer Portal, por eso es necesario añadir el claim groups a este scope.
En la sección de “Client Scopes” editar el scope profile.
Añadir un “Built in” Mapper a través de “Add Builtin”.
Seleccionar y añadir el mapper “groups”
La configuración inicial de Keycloak está finalizada.
6. Configuración de WSO2 API Manager
Instalación de WSO2 AM
Es posible disponer de un servidor WSO2 AM en forma rápida ejecutando el siguiente snippet en una terminal:
docker run --ip 172.18.0.2 --add-host keycloak:172.18.0.3 --add-host wso2am:172.18.0.2 --net wso2am-keycloak-net -ti -p 8280:8280 -p 8243:8243 -p 9443:9443 --name api-manager wso2/wso2am:3.1.0
Acceso al Developer Portal
Acceder a la URL https://localhost:9443/devportal/ con las credenciales por defecto de WSO2 admin/admin
Creación del Identity Provider Federado
Desde la consola de administración de WSO2 AM (https://localhost:9443/carbon) se debe crear un Identity Provider de nombre por ejemplo “keycloak” con las siguientes características:
En la sección “Claim configuration” -> Basic Claim Configuration -> Define Custom Claim Dialect (+ Add claim mapping)
- Identity Provider Claim URI: preferred_username → Local Claim URI: http://wso2.org/claims/displayName
- Identity Provider Claim URI: groups → Local Claim URI: http://wso2.org/claims/groups
En la sección “Identity Provider Roles” (+ Add Role Mapping)
- Identity Provider Role: subscriber → Local Role: Internal/subscriber
En la sección “Federated Authenticators” > OAuth2/OpenID Connect Configuration
- OpenId Enabled for this Idp: true
- Client Id: wso2apim
- Client Secret: (el client secret generado por keycloak)
- Authorization Endpoint URL: http://172.18.0.2:8080/auth/realms/master/protocol/openid-connect/auth
- Token Endpoint URL: http://172.18.0.2:8080/auth/realms/master/protocol/openid-connect/token
- Userinfo Endpoint URL: http://172.18.0.2:8080/auth/realms/master/protocol/openid-connect/userinfo
En la sección de “Just-In-Time Provisioning”
- Definir “Always provision to User Store PRIMARY”
- Habilitar Provision Silently
En la siguiente figura se detalla cómo deberá quedar el IdP:
Actualización del Service Provider de Developer Portal
Acceder a la consola Carbon y editar el Service Provider de nombre “apim_devportal”.
Definir sobre el Service provider las siguientes características:
En la sección “Claim configuration” -> Basic Claim Configuration -> Define Custom Claim Dialect (+ Add claim mapping)
-
Identity Provider Claim URI: preferred_username → Local Claim URI: http://wso2.org/claims/displayName
-
Identity Provider Claim URI: groups → Local Claim URI: http://wso2.org/claims/groups
En la sección “Identity Provider Roles” (+ Add Role Mapping)
-
Identity Provider Role: subscriber → Local Role: Internal/subscriber
En la sección “Local& Outbound Authentication Configuration”
-
Authentication Type: keycloak
Guardar el Service Provider, a continuación se detalla como debe quedar la configuración:
La configuración en WSO2 AM está finalizada.
7. Prueba con usuario admin
Realizar un logout del developer portal y volver a hacer un login, debería aparecer la pantalla de login de keycloak
Esta vez ingresar las credenciales del admin de keycloak (admin/keycloak)
WSO2 AM acepta el login del IDP federado.
8. Prueba con otros usuarios
Creación de un rol en keycloak
En la sección de “Roles” ejecutar “Add Role”
Asignar el nombre subscriber
Creación de un usuario en keycloak
En la sección de Users ejecutar “Add User”
Crear un usuario con (por ejemplo) nombre “wso2”
En la sección “Credentials” definir la password a (por ejemplo) “wso2″y deshabilitar la opción de password temporal:
Asignar el usuario al Role subscriber
En la sección “Role Mappings” seleccionar el role subscriber de “Available Roles” y pasarlo a “Assigned Roles”.
Realizar un logout del developer portal y volver a hacer un login, debería aparecer la pantalla de login de keycloak.
Esta vez ingresar las credenciales del usuario creado (wso2/wso2).
WSO2 AM acepta el login del IDP federado.
9. Conclusión
Es posible utilizar keycloak como proveedor de identidades de WSO2 AM mediante el protocolo Oauth2 a través de una sencilla configuración sin necesidad de desarrollos adicionales.
Para desinstalar el laboratorio simplemente detener los contenedores docker y eliminarlos además de eliminar la red puente creada ejecutando el siguiente snippet:
docker stop keycloak docker rm keycloak docker stop api-manager docker rm api-manager docker network rm wso2am-keycloak-net
¡Habla con nuestros expertos!
Contacta con nuestro equipo y descubre las tecnologías de vanguardia que potenciarán tu negocio.
contactarnos