Concept
OpenID Connect est un protocole permettant de déléguer l’authentification d’une application à une application tierce appelée Identity Provider (IDP). Basé sur le protocole OAuth 2 et son mécanisme de code d’autorisation, OpenId Connect est utilisé par FlowerDocs GUI afin de fournir à ses utilisateurs un mécanisme de Single Sign On.
Depuis la page d’authentification, les utilisateurs s’authentifient en sélectionnant un des Identity Providers affichés.
Une fois authentifié au niveau de l’Identity Provider, l’utilisateur est redirigé vers une URL de redirection redirect_uri
de FlowerDocs GUI avec un code d’autorisation généré par l’Identity Provider.
A partir de ce code d’autorisation, FlowerDocs GUI initialise la session HTTP utilisateur après avoir récupéré les id_token
et access_token
auprès de l’Identity Provider. Ensuite un jeton utilisateur propre à FlowerDocs est généré.
Prérequis
1. La clé secrète de FlowerDocs Core doit être partagée avec FlowerDocs GUI pour pouvoir utiliser ce mécanisme.
Le partage de la clé secrète est nécessaire afin que FlowerDocs GUI puisse initialiser la session utilisateur en générant un jeton utilisateur valide (propriété token.key
dans le fichier gui.properties).
2. Autorisation de l’URL de retrait dans l’Identity Provider
Configuration
La configuration d’un Identity Provider OpenId Connect peut être réalisée à travers la console d’administration FlowerDocs.
Cette configuration est stockée dans des documents techniques de classe OAuthClientConfiguration
. Les différents paramètres à renseigner sont stockés dans des tags.
Compte d’accès
La plupart des Identity Providers nécessitent une authentification pour pouvoir lancer le processus d’authentification. Pour configurer le compte utilisé par FlowerDocs pour contacter l’Identity Provider, il est nécessaire de valoriser les tags :
ClientId
: l’identifiant représentant l’application cliente (ou Relying party) : FlowerDocs GUIClientSecret
: le mot de passe associé à l’identifiant
Lien avec FlowerDocs
RedirectUriTemplate
: template utilisé pour la génération du paramètreredirect_uri
(la valeur doit être définie à {baseUrl}/login/oauth2/code/{registrationId})Scope
: les scopes OAuth 2.0 (à minima openid et email)UserNameAttributeName
: Nom de l’attribut à utiliser comme identifiant de l’utilisateurRegistrationId
: Identifiant unique du serveur d’autorisationClientName
: Libellé du clientIcon
: Icône Font Awesome à afficher sur la page de connexionMemberOfAttribute
: Nom de l’attribut permettant de fournir des groupes
Endpoints
Les différents endpoints requis par le protocole OpenId Connect doivent être configurés à l’aide des tags suivants :
AuthorizationUri
: Endpoint d’autorisation de l’utilisateurTokenUri
: Endpoint permettant de récupérer les jetonsJwkSetUri
: Endpoint utilisé pour accéder à la clé publique (JWK) du serveur d’autorisations permettant de valider les informations reçuesUserInfoUri
: Endpoint exposant les attributs (ou claims) des utilisateurs
Pour plus de détails, consultez les spécifications OpenId Connect
Alfresco
Lorsque Alfresco est configuré comme référentiel de données de FlowerDocs, certaines étapes de configuration supplémentaires sont nécessaires.
Le module flower-docs-alfresco-authentication-2.5.4.7.amp
doit être déployé comme un module AMP Alfresco.
Ce module défini un nouveau sous-système d’authentification permettant d’authentifier un utilisateur existant à partir d’un jeton fourni par FlowerDocs suite à une authentification OIDC.
Il est ainsi nécessaire de définir ce sous-système d’authentification fdtoken:tokenauthenticator
dans la configuration Alfresco via la propriété authentication.chain
.
L’ajout de ce module requiert la définition de la clé secrète (token.key
) utilisée par FlowerDocs afin de valider les jetons utilisateurs afin de les valider.
authentication.chain=fdtoken:tokenauthenticator,alfinst:alfrescoNtlm
token.key=<clé secrète>
Pour les versions antérieures à la versions 2.5.0, il est nécessaire d’ajouter les paramètres suivants à la configuration de FlowerDocs GUI :
oauth.config.class=fd:oauthClientConfiguration
oauth.config.clientId=fd:clientId
oauth.config.clientSecret=fd:clientSecret
oauth.config.authorizationGrantType=fd:AuthorizationGrantType
oauth.config.redirectUriTemplate=fd:RedirectUriTemplate
oauth.config.scope=fd:Scope
oauth.config.authorizationUri=fd:AuthorizationUri
oauth.config.tokenUri=fd:TokenUri
oauth.config.userInfoUri=fd:UserInfoUri
oauth.config.userNameAttribute=fd:UserNameAttributeName
oauth.config.memberOfAttribute=fd:MemberOfAttribute
oauth.config.registrationId=fd:RegistrationId
oauth.config.jwkSetUri=fd:JwkSetUri
oauth.config.clientName=fd:ClientName
oauth.config.icon=fd:Icon
Exemples
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:Document category="DOCUMENT" name="Google" xmlns="http://flower.com/docs/domain/common"
xmlns:ns2="http://flower.com/docs/domain/component" xmlns:ns3="http://flower.com/docs/domain/document">
<id>Google</id>
<ns2:data>
<ns2:classId>OAuthClientConfiguration</ns2:classId>
</ns2:data>
<ns2:Tags>
<ns2:tags name="ClientId" readOnly="false">
<ns2:value>***</ns2:value>
</ns2:tags>
<ns2:tags name="ClientSecret" readOnly="false">
<ns2:value>***</ns2:value>
</ns2:tags>
<ns2:tags name="RedirectUriTemplate" readOnly="false">
<ns2:value>{baseUrl}/login/oauth2/code/{registrationId}</ns2:value>
</ns2:tags>
<ns2:tags name="Scope" readOnly="false">
<ns2:value>openid</ns2:value>
<ns2:value>profile</ns2:value>
<ns2:value>email</ns2:value>
<ns2:value>address</ns2:value>
<ns2:value>phone</ns2:value>
</ns2:tags>
<ns2:tags name="AuthorizationUri" readOnly="false">
<ns2:value>https://accounts.google.com/o/oauth2/v2/auth</ns2:value>
</ns2:tags>
<ns2:tags name="TokenUri" readOnly="false">
<ns2:value>https://www.googleapis.com/oauth2/v4/token</ns2:value>
</ns2:tags>
<ns2:tags name="JwkSetUri" readOnly="false">
<ns2:value>https://www.googleapis.com/oauth2/v3/certs</ns2:value>
</ns2:tags>
<ns2:tags name="UserInfoUri" readOnly="false">
<ns2:value>https://www.googleapis.com/oauth2/v3/userinfo</ns2:value>
</ns2:tags>
<ns2:tags name="UserNameAttributeName" readOnly="false">
<ns2:value>sub</ns2:value>
</ns2:tags>
<ns2:tags name="RegistrationId" readOnly="false">
<ns2:value>google</ns2:value>
</ns2:tags>
<ns2:tags name="ClientName" readOnly="false">
<ns2:value>Google</ns2:value>
</ns2:tags>
<ns2:tags name="Icon" readOnly="false">
<ns2:value>border-danger text-danger mdi mdi-google</ns2:value>
</ns2:tags>
</ns2:Tags>
</ns3:Document>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:Document category="DOCUMENT" name="Microsoft" xmlns="http://flower.com/docs/domain/common"
xmlns:ns2="http://flower.com/docs/domain/component" xmlns:ns3="http://flower.com/docs/domain/document">
<id>Microsoft</id>
<ns2:data>
<ns2:classId>OAuthClientConfiguration</ns2:classId>
</ns2:data>
<ns2:Tags>
<ns2:tags name="ClientId" readOnly="false">
<ns2:value>***</ns2:value>
</ns2:tags>
<ns2:tags name="ClientSecret" readOnly="false">
<ns2:value>***</ns2:value>
</ns2:tags>
<ns2:tags name="AuthorizationGrantType" readOnly="false">
<ns2:value>{baseUrl}/login/oauth2/code/{registrationId}</ns2:value>
</ns2:tags>
<ns2:tags name="RedirectUriTemplate" readOnly="false">
<ns2:value>{baseUrl}/login/oauth2/code/{registrationId}</ns2:value>
</ns2:tags>
<ns2:tags name="Scope" readOnly="false">
<ns2:value>openid</ns2:value>
<ns2:value>profile</ns2:value>
<ns2:value>email</ns2:value>
</ns2:tags>
<ns2:tags name="AuthorizationUri" readOnly="false">
<ns2:value>https://login.microsoftonline.com/common/oauth2/v2.0/authorize</ns2:value>
</ns2:tags>
<ns2:tags name="TokenUri" readOnly="false">
<ns2:value>https://login.microsoftonline.com/common/oauth2/v2.0/token</ns2:value>
</ns2:tags>
<ns2:tags name="JwkSetUri" readOnly="false">
<ns2:value>https://login.microsoftonline.com/common/discovery/v2.0/keys</ns2:value>
</ns2:tags>
<ns2:tags name="UserInfoUri" readOnly="false">
<ns2:value>https://graph.microsoft.com/oidc/userinfo</ns2:value>
</ns2:tags>
<ns2:tags name="UserNameAttributeName" readOnly="false">
<ns2:value>sub</ns2:value>
</ns2:tags>
<ns2:tags name="RegistrationId" readOnly="false">
<ns2:value>microsoft</ns2:value>
</ns2:tags>
<ns2:tags name="ClientName" readOnly="false">
<ns2:value>Microsoft</ns2:value>
</ns2:tags>
<ns2:tags name="Icon" readOnly="false">
<ns2:value>border-info text-info mdi mdi-microsoft</ns2:value>
</ns2:tags>
</ns2:Tags>
</ns3:Document>
Connexion automatique
Pour authentifier un utilisateur automatiquement à l’aide de ce mécanisme d’authentification, il est possible d’ajouter le paramètre sso=auto
dans l’URL.
Avec ce paramètre, l’utilisateur, lorsqu’il accède à la page de connexion est automatiquement authentifié en utilisant OpenId Connect.