Le service idp se base sur la brique logicielle Keycloak
Elle permet de gérer les identités ainsi que de procéder au management des accès aux différentes ressources des utilisateurs.
Nous avons ainsi plusieurs types d'utilisateurs :
- Citoyens
- Administrateur fonctionnel
- Utilisateurs Financeurs
- Comptes de services des clients confidentiels
Un template MCM a aussi été créé.
docker run -d --name postgres-mcm -p 5432:5432 -e POSTGRES_ROOT_PASSWORD=${ROOT_PASSWORD} -e POSTGRES_DB=idp_db -e POSTGRES_USER=${DB_USER} -e POSTGRES_PASSWORD=${DB_PASSWORD} -d postgres:13.6
# Exécuter une commande pour modifier le schema public
docker exec -it postgres-mcm psql -U admin -a idp_db -c 'ALTER SCHEMA public RENAME TO idp_db;'
# Exécuter une commande pour changer le type du champ value dans la table user_attribute
docker exec -it postgres-mcm psql -U admin -a idp_db -c 'ALTER TABLE idp_db.user_attribute ALTER COLUMN value TYPE TEXT;'
# Exécuter une commande pour changer le type du champ value dans la table group_attribute
docker exec -it postgres-mcm psql -U admin -a idp_db -c 'ALTER TABLE idp_db.group_attribute ALTER COLUMN value TYPE TEXT;'docker run -d --link postgres-mcm --name keycloak -p 9000:8080 -e KEYCLOAK_USER=${USER} -e KEYCLOAK_PASSWORD=${PASSWORD} -e DB_VENDOR=postgres -e DB_ADDR=postgres-mcm -e DB_PORT=5432 -e DB_DATABASE=idp_db -e DB_SCHEMA=idp_db -e DB_USER=${DB_USER} -e DB_PASSWORD=${DB_PASSWORD} -e JAVA_OPTS_APPEND="-Dkeycloak.profile.feature.scripts=enabled" jboss/keycloak:16.1.1Ouvrir un terminal vers le répertoire parent du projet « platform » puis lister les images docker en cours
docker psEntrer la commande suivante en remplaçant par le container id qui apparait dans le terminal
docker exec -it <CONTAINER ID> bashExecuter ensuite la commande pour créer le dossier allant contenir la blacklist des passwords
mkdir /opt/jboss/keycloak/standalone/data/password-blacklistsSortir du container (exit) et executer la commande suivante
docker cp ./platform/idp/password-blacklists/blacklist.txt <CONTAINER ID>:/opt/jboss/keycloak/standalone/data/password-blacklists
docker cp ./platform/idp/mcm_template <CONTAINER ID>:/opt/jboss/keycloak/themes/mcm_templateRécupérer le fichier overlays/realms/mcm-realm.json
Note La liste des variables à remplacer est fournie ci-dessous néanmoins cela n'empêche pas l'import du realm mcm. Vous pourrez modifier ces variables via l'interface si besoin.
Importer le realm mcm via l'interface Keycloak
| Variables | Description | Obligatoire |
|---|---|---|
| IDP_API_CLIENT_SECRET | Client secret du client confidentiel API | Non |
| IDP_SIMULATION_MAAS_CLIENT_SECRET | Client secret du client confidentiel simulation-maas-backend | Non |
| MAIL_API_KEY | Api key SMTP si auth true | Non |
| SMTP_AUTH | Boolean pour savoir si nécessite un user/password | Non |
| MAIL_PORT | Port SMTP | Non |
| MAIL_HOST | Host SMTP | Non |
| EMAIL_FROM_KC | Email from | Non |
| MAIL_USER | Username SMTP si auth true | Non |
| IDP_MCM_IDENTITY_PROVIDER_CLIENT_ID | Client id identity provider Azure AD | Non |
| IDP_MCM_IDENTITY_PROVIDER_CLIENT_SECRET | Client secret identity provider Azure AD | Non |
| IDP_MCM_IDENTITY_PROVIDER_CLIENT_SECRET | Client secret identity provider Azure AD | Non |
| FRANCE_CONNECT_IDP_PROVIDER_CLIENT_ID | Client ID de l’identity provider de France Connect | Non |
| FRANCE_CONNECT_IDP_PROVIDER_CLIENT_SECRET | Client secret identity provider de France Connect | Non |
Dans les clients platform, administration et simulation-maas-client, des redirects URI sont à adapter selon l'environnement.
Note Comme mentionné, elles sont modifiables directement sur le realm avant import ou via l'interface Keycloak.
Ces redirect URI sont nécessaires pour pouvoir se connecter sur Website, Administration, Simulation-maas ou l'api.
| Variables | Description | Obligatoire |
|---|---|---|
| WEBSITE_FQDN | Url du website | Oui |
| ADMIN_FQDN | Url de l'administration | Oui |
| API_FQDN | Url de l'api | Oui |
| SIMULATION_MAAS_FQDN | Url de simulation-maas | Oui |
Le produit s'appuie sur la librairie Keycloak-FranceConnect de l'INSEE pour simplifier l'intégration de FranceConnect.
Executer la commande suivante
docker cp ./platform/idp/keycloak-franceconnect-4.1.0.jar <CONTAINER ID>:/opt/jboss/keycloak/standalone/deploymentsVérifier que les informations de l'Identity Provider France connect sont bien renseignées.
Sur un environnement local ou de test, il est possible de s'appuyer sur le démonstrateur FranceConnect(https://fournisseur-de-service.dev-franceconnect.fr/).
Pour pouvoir executer des actions supplémentaires sur les flows d'authentification KC, des javascripts providers ont été mis en place.
docker cp ./platform/idp/scripts/scripts.jar <CONTAINER ID>:/opt/jboss/keycloak/standalone/deployments/scripts.jarSi une modification est faite sur ces scripts, il faudra regénerer le fichier scripts.jar
Portail d'admin :
- URL : localhost
- Port : 9000
Les realms sont automatiquement importés au déploiement.
Si une mise à jour du realm est nécessaire, vous pouvez lancer la pipeline avec l'option "MIGRATION_STRATEGY" à "yes"
Le deploiement en preview permet de déployer un second Keycloak sur une bdd H2 permettant de tester des connexions inter-IDP.
Un script est lancé au déploiement de la bdd pgsql permettant d'aller altérer le schema et de créer l'utilisateur de service nécessaire pour l'api. (databaseConfig/createServiceUser.sh)
Un job est lancé au déploiement de la bdd pgsql permettant d'aller altérer le type du champ value de la table user_attributes.
Le fichier mcm-realm.json n'est pas importé au déploiement. Il faudra l'importer manuellement comme précisé pour l'installation locale.
Sur cet environnement, la bdd pgsql est externalisée. Le paramétrage de la bdd est donc à faire en amont.
Comme présenté dans le schéma global de l'architecture ci-dessous
L'idp est en relation avec plusieurs services:
Il est en relation avec simulation_maas également.
Plusieurs de ces services utilisent la librairie keycloak-js afin de gérer les connexions, les accès des utilisateurs ainsi que les CRUD des utilisateurs.
Pas de tests unitaires nécéssaires pour ce service
