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
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.