Module Connexion
Isotope utilise spring-security et repose sur JWT (https://jwt.io/). Cela signifie qu'à chaque échange entre le frontend et le backend, un token doit être envoyé. Ce token contient les informations sur l'utilisateur connecté et suit la spécification JWT.
Connexion standard
Avec la connexion standard, pour obtenir un token le client React présente un formulaire avec login et mot de passe.

La configuration
# Header utilisé dans la request pour envoyé le token
jwt.header=Authorization
# Clé utilisée pour chiffrer le mot de passe
jwt.secret=i501oP3
# attention, pour le moment, cette valeur d'expiration doit aussi être utilisée dans le fichier App.jsx du front en
# enlevant quelques secondes
jwt.expiration=1800
# Valeur à changer pour modifier l'url de base du controller de connexion
jwt.route.authentication.path=/auth
# exemple d'utilisation de la whitelist
#security.paths.whitelist=/api/admin/bo/modelemodules/media/**
Les classes Java importantes
JwtAuthenticationTokenFiltercorrespond au filtre utilisé dans chaque action pour vérifier la présence du token et insérer un JwtUser dans spring security.JwtUserDetailsServiceImplcorrespond à l'implémentation de UserDetailsService pour Isotope.JwtTokenUtilgère, crée, signe et vérifie le token JWT Isotope.JwtUserest l'implémentation duUserDetailsde sring security pour Isotope.SecurityConfigcontient toute la configuration de spring security pour Isotope.AuthenticationRestControllercorrespond au controller qui contient la méthodeloginet la méthodeuser
Connexion Google
Isotope intègre la connexion à une API Google pour la connexion de ses utilisateurs via la librairie Isotope Security Google.
Pour l'utiliser, ajoutez dans votre POM la dépendance maven suivante:
<dependency>
<groupId>com.ipsosenso</groupId>
<artifactId>isotope-security-google</artifactId>
</dependency>
Le principe
Pour la connexion à Google, le client React s'occupe de réaliser l'appel à l'API Google par l'intermédiaire de la librairie react-google-login.
Le token est ensuite envoyé au serveur isotope avec la même méthode que la connexion standard
: /auth/login. Isotope vérifie que le domaine du compte correspond à celui renseigné
en configuration, il vérifie ensuite le token auprès des serveurs Google avec le Google id
renseigné en conf également et pour finir si le login existe en BDD isotope,
le token est renvoyé.
Le principe reste par la suite le même que pour la connexion standard (mis à part que le filtre Google
GoogleJwtAuthenticationTokenFilter vérifie le token auprès de Google).
La configuration
# Google ID à renseigner
google.client.id=851856015255-unhs3m3xxxxxxxj8i6bcds9812hlp8.apps.googleusercontent.com
# Exemple
google.client.domainRestrictions[0]=petitforestier.fr
google.client.domainRestrictions[1]=ipsosenso.com
À la première connexion
Lors de la première connexion, une fois que le token a été vérifié auprès de Google et qu'il est valide, l'application crée un compte en base (en lui plaçant le rôle INVITE uniquement).
Les classes Java importantes
GoogleJwtAuthenticationTokenFiltersurcharge du token filter d'isotope.GoogleJwtUsersurcharge du JwtUser d'isotope pour intégrer le Google Id et la Locale issue de Google en supplément.GoogleOAuth2RestControllersurcharge du controller d'isotope pour appeler les services Google.GoogleSecurityConfigcontient la configuration propre à Isotope GoogleGoogleServiceImplcontient les méthodes qui vérifient le compte auprès de Google.
Connexion LDAP
Isotope intègre l'utilisation d'un annuaire LDAP pour la connexion de ses utilisateurs via la librairie Isotope Security LDAP. Pour l'utiliser, ajoutez dans votre POM la dépendance maven suivante:
<dependency>
<groupId>com.ipsosenso</groupId>
<artifactId>isotope-security-ldap</artifactId>
</dependency>
Le principe
Lorsque le serveur reçoit du client les identifiants de connexion, il commence par rechercher l'utilisateur dans le LDAP. Si celui-ci existe, il en récupère le DN (Distinguished Name).
Il vérifie ensuite que l'utilisateur existe en BDD, et le cas échéant récupère via le DN de l'utilisateur ses profils renseignés dans le LDAP.
Enfin, il construit un JWTUser à partir de l'utilisateur en base, et de l'intersection des profils de l'utilisateur dans le LDAP et dans la BDD. Cet utilisateur est ensuite exploitable comme dans le cadre d'une connexion classique.
La configuration
# l'URL d'accès au LDAP
isotope.security.ldap.url=ldap://url:port
# Identifiants du gestionnaire du LDAP
isotope.security.ldap.manager-dn=cn=Manager,dc=isotope,dc=com
isotope.security.ldap.manager-password=password
# Le noeud racine de la partie du LDAP contenant les utilisateur
# Utilisé pour la recherche du DN de l'utilisateur à authentifier
isotope.security.ldap.base-recherche-personnes=dc=ipsosenso,dc=com
# Le noeud racine de la partie du LDAP contenant les profils
isotope.security.ldap.base-recherche-profils=sn=ISOTOPE,sn=applications,dc=ipsosenso,dc=com
Les classes Java importantes
LdapAuthenticationControllersurcharge du controller d'isotope pour authentifier l'utilisateur via le LDAP.LdapSecurityConfigcontient la configuration propre à Isotope security LDAPLdapServicecontient les méthodes de connexion au LDAP, d'authentification de l'utilisateur, et de récupération des profils.
Téléchargement de fichiers / Affichage d'images et sécurité
Dans Isotope, il est possible de :
- télécharger un fichier
- afficher une image
qui sont protégés : non accessible en mode déconnecté.
Le principe
Un service générique de génération de Ticket (TicketService) qui permet de récupérer un ticket valable un certain
temps (en conf) pour une url donnée. Ce service reçoit en entrée le user et l'url et génère un
ticket qu'il renvoie. On requête ensuite le serveur pour télécharger notre fichier avec son
URL à laquelle on passe en paramètre GET ce fameux ticket.
Il y a un filtre (TicketFilter pour lequel on indique sur quelles URLs ce filtre fonctionne dans la configuration)
qui autorise la récupération du fichier s'il reconnait l'url et que le ticket est bien valide.
Le ticket est au format JWT et contient un paramètre "path" qui correspond au path demandé. Il est possible de changer la clé qui identifie ce paramètre dans le token.
Côté client, dans isotope, on a déjà un composant (qui s'utilise comme un <a href=''>test</a>)
qui s'occupe pour nous de faire l'appel au service de ticket et de télécharger ensuite le fichier
(https://git.ipsosenso.com/isotope/isotope-client-react/blob/master/src/components/download/IsotopeLink.jsx).
La configuration
# Temps en ms pendant lequel le token sera valide (par défaut 30000ms)
#security.ticket.validity
# Identifiant utilisé dans le token JWT pour le path
#security.ticket.jwt.key=path
# Correspond au paramètre GET à utiliser pour envoyer le ticket sur une URL protégée
#security.ticket.parameterkey
# Exemple de surcharge de la liste des url qui fonctionnent par ticket
#security.ticket.urlliste=/export/**,/download/**
Les classes Java importantes
TicketControllerpermet de récupérer un ticket pour un path donné.TicketServicecontient le code de création des tickets pour le système de ticket d'Isotope.TicketSecurityConfigcontient la surcharge de la sécurité isotope pour autoriser certaines URLs à utiliser le service de ticket.TicketFilters'occupe de vérifier le ticket pour les URLs indiquées en conf.