WSO2

Cómo utilizar keycloak como proveedor de identidades de WSO2 API Manager

En esta guía tutorial se enseñará cómo utilizar un Identity Server Keycloak integrándolo como un componente del WSO2 API Manager.

Es importante saber que si la organización ya dispone de un Proveedor de Identidades (IdP), es posible conectar de manera simple ese IdP a la implementación de WSO2 APIM en lugar de migrar todas las identidades de usuario a WSO2 Identity Server.

Para ello se seguirá el siguiente índice:

  1. Introducción
    1. WSO2 AM
    2. Keycloak
  2. Integración
    1. Como Proveedor de Identidades Federado (Federated Identity Provider)
    2. Como Gestor de Claves de Terceros (Third Party Key Manager)
  3. Requisitos
    1. Docker
  4. Configuración de Docker
  5. Configuración de Keycloak
    1. Instalación de Keycloak
    2. Creación del cliente
    3. Actualización del scope profile
  6. Configuración de WSO2 AM
    1. Instalación de WSO2 AM
    2. Acceso al Developer Portal
    3. Creación del Identity Provider Federado
    4. Actualización del Service Provider de Developer Portal
  7. Prueba con usuario admin
  8. Prueba con otros usuarios
    1. Creación de un rol en keycloak
    2. Creación de un usuario en keycloak
    3. Asignar el usuario al Role subscriber
  9. Conclusión

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:

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)

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

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)

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
apis-open-source-ebook-es

Crece sin límites con Open APIs

Las Open Apis son la mejor opción para mejorar y posicionar mejor a tu empresa en un mercado cada vez más competitivo.

Written By

Gustavo Vázquez

Arquitecto de Soluciones