Aller au contenu principal
Version: 3.20

Statut : Travail en cours
Cette page de documentation est en cours de rédaction et peut être fréquemment mise à jour.

Intégration de l’authentification Keycloak dans Phrasea

Statut : Travail en cours
Cette page de documentation est en cours de rédaction et peut être fréquemment mise à jour.

Vue d’ensemble

Phrasea s’appuie sur Keycloak avec OpenID Connect pour la gestion de l’authentification sur ses différents services.
Lors de l’installation, un realm dédié nommé Phrasea est créé, contenant des clients individuels pour chaque service Phrasea.

Authentification et autorisation

  • Keycloak prend en charge l’authentification des utilisateurs via des protocoles standards comme OAuth2, OpenID Connect et SAML. Cela facilite l’intégration avec les applications web, mobiles et les API.
  • Keycloak permet une gestion des autorisations basée sur les rôles, offrant une gestion fine des droits utilisateurs, alignée sur les rôles définis dans la base Phrasea (administrateurs, éditeurs, lecteurs, etc.).

Gestion des utilisateurs et des groupes

  • Keycloak gère les utilisateurs et les groupes, permettant une segmentation selon les besoins. Chaque utilisateur peut être rattaché à un ou plusieurs groupes, et les droits peuvent être attribués à ces groupes.
  • Les informations utilisateurs (email, nom d’utilisateur, rôles) peuvent être synchronisées avec Phrasea, assurant une expérience fluide et centralisée.

Single Sign-On (SSO)

  • Keycloak propose le SSO, permettant aux utilisateurs de se connecter une seule fois pour accéder à toutes les applications liées à Phrasea, internes ou externes. Cela améliore l’expérience utilisateur et simplifie la gestion des sessions.
  • Les sessions utilisateurs peuvent être gérées de façon centralisée, et Keycloak permet aussi la révocation des sessions si besoin (ex : départ d’un utilisateur).

Fédération et intégration avec des IdP externes

  • Keycloak peut se connecter à des fournisseurs d’identité externes (IdP) comme Microsoft Active Directory, ou tout autre fournisseur compatible SAML ou OpenID Connect. Cela permet d’utiliser les identités existantes sans créer de nouveaux comptes pour Phrasea.
  • La fédération simplifie l’authentification pour les organisations utilisant déjà d’autres systèmes IAM.

Fonctionnalités de sécurité avancées

  • Authentification multi-facteurs (MFA) : Keycloak prend en charge l’authentification à deux facteurs, renforçant la sécurité en demandant une vérification supplémentaire (application mobile, token, etc.).
  • Gestion des sessions et des tokens : Keycloak permet de configurer la durée de vie des sessions et des tokens, et peut forcer la révocation en cas de compromission.
  • Audit et logs : Keycloak fournit des capacités de journalisation pour suivre les connexions, échecs d’authentification et autres événements de sécurité, essentiel pour la conformité.

Configuration

  • Lors du déploiement de la stack, Phrasea exécute un configurateur qui initialise un realm et des clients dédiés à cette installation. Ces clients sont utilisés par les différents services Phrasea.
  • Un compte root Keycloak et un compte administrateur principal pour l’application sont également initialisés.
  • Les interconnexions avec l’IdP du client sont déclarées manuellement ultérieurement.
  • Phrasea peut être configuré avec OAuth2 ou OpenID Connect pour l’authentification des utilisateurs, centralisant la gestion des identités et facilitant l’intégration avec des fournisseurs tiers.

Rôles et Scopes

Vous pouvez commencer par lire cette explication sur la différence entre Scopes et Rôles ici.

Rôles

Les rôles dans Phrasea servent à définir des ensembles de permissions qui peuvent être attribués aux utilisateurs ou aux comptes de service.
Ces rôles sont configurés dans le realm Phrasea de Keycloak et sont référencés dans l’application pour contrôler l’accès à certaines fonctionnalités et modules.

  • Rôles applicatifs :
    Les rôles applicatifs sont associés aux différents modules et fonctionnalités de Phrasea. Par exemple, les rôles peuvent inclure admin, editor, viewer ou des rôles plus granulaires spécifiques à certains modules.
  • Attribution des rôles :
    Les rôles sont attribués aux utilisateurs ou aux clients lors du provisioning, soit manuellement via la console d’administration Keycloak, soit automatiquement via des scripts de migration et des commandes de configuration (voir les fichiers dans src/Configurator/Vendor/Keycloak/ et la logique de migration dans src/Configurator/Vendor/Keycloak/Migrations/).

Scopes

Les scopes dans Phrasea servent à restreindre ou à définir le contexte dans lequel les rôles et permissions s’appliquent.
Les scopes sont généralement associés aux flux OAuth2 et OpenID Connect, permettant aux clients de demander des niveaux d’accès spécifiques.

  • Scopes personnalisés :
    Des scopes personnalisés peuvent être définis pour chaque client dans le realm Phrasea, permettant un contrôle fin sur les données et actions accessibles lors de l’authentification et de l’autorisation.
  • Utilisation dans les clients :
    Chaque client (représentant un service Phrasea) peut demander des scopes spécifiques lors de l’authentification, garantissant que seules les permissions nécessaires sont accordées pour son fonctionnement.

Scopes communs

Scope commun à tous les services

ScopeDescription
acrScope OpenID Connect pour ajouter acr (authentication context class reference) au token
addressScope OpenID Connect intégré : adresse
basicScope OpenID Connect pour ajouter toutes les claims de base au token
emailScope OpenID Connect intégré : email
microprofile-jwtScope intégré Microprofile - JWT
offline_accessScope OpenID Connect intégré : offline_access
openid
phoneScope OpenID Connect intégré : téléphone
profileScope OpenID Connect intégré : profil
rolesScope OpenID Connect pour ajouter les rôles utilisateur au token d’accès
service_accountScope spécifique pour un client activé pour les comptes de service
web-originsScope OpenID Connect pour ajouter les origines web autorisées au token d’accès

Scopes Databox

ScopeDescription
asset-data-template:createasset-data-template:create dans Databox
asset-data-template:deleteasset-data-template:delete dans Databox
asset-data-template:editasset-data-template:edit dans Databox
asset-data-template:listasset-data-template:list dans Databox
asset-data-template:operatorasset-data-template:operator dans Databox
asset-data-template:ownerasset-data-template:owner dans Databox
asset-data-template:readasset-data-template:read dans Databox
asset:createasset:create dans Databox
asset:deleteasset:delete dans Databox
asset:editasset:edit dans Databox
asset:listasset:list dans Databox
asset:operatorasset:operator dans Databox
asset:ownerasset:owner dans Databox
asset:readasset:read dans Databox
attribute-definition:createattribute-definition:create dans Databox
attribute-definition:deleteattribute-definition:delete dans Databox
attribute-definition:editattribute-definition:edit dans Databox
attribute-definition:listattribute-definition:list dans Databox
attribute-definition:operatorattribute-definition:operator dans Databox
attribute-definition:ownerattribute-definition:owner dans Databox
attribute-definition:readattribute-definition:read dans Databox
attribute-entity:createattribute-entity:create dans Databox
attribute-entity:deleteattribute-entity:delete dans Databox
attribute-entity:editattribute-entity:edit dans Databox
attribute-entity:listattribute-entity:list dans Databox
attribute-entity:operatorattribute-entity:operator dans Databox
attribute-entity:ownerattribute-entity:owner dans Databox
attribute-entity:readattribute-entity:read dans Databox
attribute-list:createattribute-list:create dans Databox
attribute-list:deleteattribute-list:delete dans Databox
attribute-list:editattribute-list:edit dans Databox
attribute-list:listattribute-list:list dans Databox
attribute-list:operatorattribute-list:operator dans Databox
attribute-list:ownerattribute-list:owner dans Databox
attribute-list:readattribute-list:read dans Databox
attribute-policy:createattribute-policy:create dans Databox
attribute-policy:deleteattribute-policy:delete dans Databox
attribute-policy:editattribute-policy:edit dans Databox
attribute-policy:listattribute-policy:list dans Databox
attribute-policy:operatorattribute-policy:operator dans Databox
attribute-policy:ownerattribute-policy:owner dans Databox
attribute-policy:readattribute-policy:read dans Databox
basket:createbasket:create dans Databox
basket:deletebasket:delete dans Databox
basket:editbasket:edit dans Databox
basket:listbasket:list dans Databox
basket:operatorbasket:operator dans Databox
basket:ownerbasket:owner dans Databox
basket:readbasket:read dans Databox
collection:createcollection:create dans Databox
collection:deletecollection:delete dans Databox
collection:editcollection:edit dans Databox
collection:listcollection:list dans Databox
collection:operatorcollection:operator dans Databox
collection:ownercollection:owner dans Databox
collection:readcollection:read dans Databox
emailScope OpenID Connect intégré : email
entity-list:createentity-list:create dans Databox
entity-list:deleteentity-list:delete dans Databox
entity-list:editentity-list:edit dans Databox
entity-list:listentity-list:list dans Databox
entity-list:operatorentity-list:operator dans Databox
entity-list:ownerentity-list:owner dans Databox
entity-list:readentity-list:read dans Databox
integration:createintegration:create dans Databox
integration:deleteintegration:delete dans Databox
integration:editintegration:edit dans Databox
integration:listintegration:list dans Databox
integration:operatorintegration:operator dans Databox
integration:ownerintegration:owner dans Databox
integration:readintegration:read dans Databox
rendition-definition:createrendition-definition:create dans Databox
rendition-definition:deleterendition-definition:delete dans Databox
rendition-definition:editrendition-definition:edit dans Databox
rendition-definition:listrendition-definition:list dans Databox
rendition-definition:operatorrendition-definition:operator dans Databox
rendition-definition:ownerrendition-definition:owner dans Databox
rendition-definition:readrendition-definition:read dans Databox
rendition-policy:createrendition-policy:create dans Databox
rendition-policy:deleterendition-policy:delete dans Databox
rendition-policy:editrendition-policy:edit dans Databox
rendition-policy:listrendition-policy:list dans Databox
rendition-policy:operatorrendition-policy:operator dans Databox
rendition-policy:ownerrendition-policy:owner dans Databox
rendition-policy:readrendition-policy:read dans Databox
rendition-rule:createrendition-rule:create dans Databox
rendition-rule:deleterendition-rule:delete dans Databox
rendition-rule:editrendition-rule:edit dans Databox
rendition-rule:listrendition-rule:list dans Databox
rendition-rule:operatorrendition-rule:operator dans Databox
rendition-rule:ownerrendition-rule:owner dans Databox
rendition-rule:readrendition-rule:read dans Databox
rendition:createrendition:create dans Databox
rendition:deleterendition:delete dans Databox
rendition:editrendition:edit dans Databox
rendition:listrendition:list dans Databox
rendition:operatorrendition:operator dans Databox
rendition:ownerrendition:owner dans Databox
rendition:readrendition:read dans Databox
workspace:createworkspace:create dans Databox
workspace:deleteworkspace:delete dans Databox
workspace:editworkspace:edit dans Databox
workspace:listworkspace:list dans Databox
workspace:operatorworkspace:operator dans Databox
workspace:ownerworkspace:owner dans Databox
workspace:readworkspace:read dans Databox

Scopes Expose

ScopeDescription
publishpublish dans Expose

Scopes Uploader

ScopeDescription
commit:listcommit:list dans Uploader

Détails d’implémentation

  • Variables d’environnement :
    L’intégration peut s’appuyer sur des variables d’environnement pour les endpoints Keycloak, les secrets clients et la configuration du realm pour le générateur de documentation.

Références