Servidor de Autenticacion/Autorizacion
Para el aceso federado el servidor central de authenticacion de IMPaCT cuenta con los servidores de identidad institucionales. La plataforma no impone una implementacion concreta como el proveedor externo de las identidades. Sin embargo, los membros de la plataforma pueden optar por el Keycloak como un servidor abierto y versatil para su configuracion de la seguridad.
Para facilitar un rapido desplege del Keycloak en los participantes, hemos creado una simple receta docker compose.
Despues del desplegue del servidor, la instalacion por defecto tendra un realm «my-awesome-organization» con un cliente «impact-data-client» preconfigurado.
Usar el Keycloak como proveedor de los Visados GA4GH
Considerando que GA4GH Passport 1.0 es una reclamacion de Pasaporte GA4GH en el OAuth 2.0 token, Keycloak puede ser configurado para proveer la autorizacion solo con una configuracion adecuada. Por ejemplo los visados firmados y codificados pueden ser guardados como los atributos del usuario y mapeados en un «ga4gh_passport_v1» scope. Sin embargo, ese metodo es muy limitado y puede utilizarse solo para el testeo. Los Visados GA4GH deben ser firmados y tener un tiempo de expiracion corta.
La manera mas sofisticada es usar una extension desarrollada especialmente para proveer los Visados GA4GH: extencion kc-ga4gh-passport-broker-0.0.2.jar puede ser integrada en Keycloak y en manera automatica generar los Visados GA4GH basados en el contenido de la base de datos usada por el Keycloak.
El GA4GH Passport Broker Mapper debe ser anadido al “ga4gh_passport_v1” scope:
Anadir GA4GH Passport Broker Mapper en el “ga4gh_passport_v1” scope
Habilitando GA4GH Passport Broker Mapper para incluir Pasaporte GA4GH en respuesta /userinfo
El mapeador generara el Pasaporte GA4GH con correpondientes Visados guardados en la base de datos de Keycloak. La base da datos debe incluir una nueva tabla ga4gh_visa:
CREATE TABLE IF NOT EXISTS public.ga4gh_visa
(
id character(36) COLLATE pg_catalog."default" NOT NULL,
user_id character(36) COLLATE pg_catalog."default" NOT NULL,
type character varying COLLATE pg_catalog."default" NOT NULL,
asserted bigint NOT NULL,
value character varying COLLATE pg_catalog."default" NOT NULL,
by character varying COLLATE pg_catalog."default" NOT NULL,
source character varying COLLATE pg_catalog."default",
CONSTRAINT "GA4GH_VISA_pkey" PRIMARY KEY (id)
);
ALTER TABLE public.ga4gh_visa OWNER TO $KC_DB_USERNAME;
>psql postgresql://postgres:postgres@localhost:5432/keycloak
INSERT INTO public.ga4gh_visa(id, user_id, type, asserted, value, by, source)
VALUES ('1ccfcc59-fffd-4131-8112-18d09f46a8cc', 'b7f6105c-5895-45f2-be37-5dd5345d8105', 'ControlledAccessGrants',
1549632872, 'http://localhost:8080/beacon/v2.0.0/cohorts/CINECA_synthetic_cohort_UK1', 'BSC',
'https://beacons.bsc.es/auth/realms/beacon');