-
Notifications
You must be signed in to change notification settings - Fork 103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Connexion à différents fournisseurs d'identités #3111
Comments
Peut-on envisager l'authentification avec Microsoft 365 ? Je ne sais pas du tout si c'est possible en revanche.... |
Ça semble possible: https://learn.microsoft.com/fr-fr/entra/identity-platform/v2-app-types#web-apps Leur plateforme utilise le protocole OAuth2. Avec @TheoLechemia, on a implémenté un provider pour ce type de protocole. |
Présentation du sujet lors du Cotech du 9 juillet 2024 : https://geonature.fr/documents/comite-technique/2024-07-09-COTECH-AUTHENTIFICATION.pdf |
Voir les évolutions liées dans le sous-module d'authentification : PnX-SI/UsersHub-authentification-module#93 |
Intégré dans la 2.15 |
Geonature 2.15.2 J'ai mis ne place l'authentification avec un compte google, ça fonctionne bien mais j'avais un problème si je voulais conserver l'authentification locale, il ne trouvait pas la classe ci-dessous
Dans geonature.config.toml j'ai remplacé DefaultConfiguration par LocalProvider et ça fonctionne.
Par contre la déconnexion depuis un compte google ne fonctionne pas : effet de bord?
Merci pour votre aide |
Bonjour @LaurentPOUL1, En effet, un oubli de modification dans le fichier Pour la connexion à Google, il faut utiliser le |
Merci, effectivement Google a sa propre adresse de déconnexion, cependant je ne sais pas comment l'indiquer à geonature : logout_url ne semble pas disponible pour OpenIDConnectProvider. Bon j'avoue que je ne suis pas certain de bien tout comprendre :-) |
Dans le cas de l'OpenIDConnectProvider et OpenIDConnect pas besoin d'indiquer le logout_url et login_url :) |
Bonjour à tous,
Avec @TheoLechemia, nous travaillons sur l'ajout d'une fonctionnalité dans GeoNature permettant de se connecter à l'aide de différents fournisseurs d'identités. L'objectif est de permettre aux structures qui le souhaitent d'utiliser leurs propres fournisseurs d'identités pour se connecter à leur GeoNature. Par défaut, plusieurs protocoles de connexions sont intégrés dans le module
UsersHub-authentification-module
(v2.3):Fonctionnement
Avant/Après cette mise à jour
Avant.
Dans la version actuelle de GeoNature, il est possible de se connecter de deux manières :
Dans le cas par défaut, lors de la connexion, le frontend effectue une requête asynchrone vers la route
/auth/login
de l'API. L'API retourne les informations de l'utilisateur qui seront stockées dans lelocalStorage
(gn_token
,gn_current_user
etgn_expires_at
). Le token permet à l'API d'identifier l'utilisateur lors des ces requêtes sur cette dernière.Dans le cas de l'INPN, l'utilisateur est automatiquement redirigé vers le portail de l'INPN lorsqu'il tente d'accéder à GeoNature. Une fois sur le portail, il doit saisir ses informations de connexion. Après une connexion réussie, une redirection est effectuée vers des routes spécifiques au CAS qui connecte l'utilisateur et renvoie son token d'identification au frontend.
Après.
Le fonctionnement initial du login est maintenu. La nouveauté réside dans la possibilité de se connecter à d'autres fournisseurs d'identités (FI) en s'appuyant sur des protocoles de connexions différents de GeoNature (OAuth, OAuth2, CAS, etc...). Côté Frontend, en cliquant pour se connecter à un FI, l'utilisateur sera rediriger vers l'API
/auth/login/<id_provider>
(id_provider correspond à l'idenfiant unique du FI). Cette API redirigera ensuite vers le portail de connexion de l'instance du fournisseur d'identités (Voir Figure ci-dessus).Une fois la connexion réussie, le portail redirige vers la route de l'API
auth/authorize/<id_provider>
qui se charge de réconcilier les informations utilisateur fournies par le FI avec le schéma de la base de données de GeoNature.Lors de la déconnexion, il est possible de se déconnecter du fournisseur d'identité ainsi que de GeoNature en utilisant la méthode
revoke()
définie par le provider.N.B. Il est possible de se connecter à plusieurs fournisseurs d'identités autres que celui de base !
Schéma.
Comment utiliser un autre fournisseur d'identités (FI) ?
Comme expliqué précédemment,
UsersHub-authenfication-module
vient avec un ensemble de protocoles de connexion prédéfini.Si le fournisseur d'identité utilise un des protocoles de connexions existant, il suffit de remplir la configuration comme dans l'exemple suivant :
Cette configuration permet de se connecter à :
Comment ça marche ?
Pour ajouter un fournisseur d'identité utilisant un protocole, if faut ajouter une section
AUTHENTICATION.PROVIDERS
dans la configuration.Dans chaque section décrivant un fournisseur d'identité, il faut déclaré :
module
déclarant le protocole de connexionid_provider
(dans cette instance de GeoNature)logo
et lelabel
qui seront affichés sur la page de login.login_url
,logout_url
si le provider en a besoingroupe_mapping
pour la réconciliation entre les groupes du fournisseurs d'identité et celui dans GeoNature.Une fois la configuration mise à jour, vous devriez voir l'interface suivante.
Déclaration d'un protocole de connexion
La "brique" permettant de faire la connexion et la réconciliation (i.e synchronisation des données du fournisseurs et celle présente en local) sur différents fournisseurs d'identités.
Chaque protocole de connexion ou provider est défini par une classe comme celle-ci :
Un protocole de connexion est défini par 4 méthodes et plusieurs attributs.
Les attributs sont les suivants
id_provider
indique l'identifiant de l'instance du provider.logo
etlabel
sont destinés à l'interface utilisateur.is_external
spécifie si le provider permet de se connecter à une autre application Flask utilisantUsersHub-authentification-module
ou à un fournisseur d'identité qui requiert une redirection vers une page de login.login_url
etlogout_url
, si le protocole de connexion nécessite une redirectiongroup_mapping
contient le mapping entre les groupes du fournisseurs d'identités et celui de votre instance de GeoNature.Les méthodes sont les suivantes :
authenticate
: Lancée sur la route/auth/login
, elle récupère les informations du formulaire de login et retourne un objetUser
. Si le protocole de connexion doit rediriger l'utilisateur vers un portail, alors authenticate retourne uneflask.Response
qui redirige vers ce dernier.authorize
: Cette méthode est lancée par la route/auth/authorize
qui récupère les informations renvoyés par le fournisseur d'identités après la connexions sur le portail.configure(self, configuration: Union[dict, Any])
: Permet de récupérer et d'utiliser les variables présentes dans le fichier de configuration. Il est possible aussi de valider les résultats à l'aide d'un schémamarshmallow
revoke()
: Permet de spécifier un fonctionnement spécifique lors de la déconnexion d'un utilisateur.Ajouter son propre provider
Si les protocoles de connexions fournis dans le module d'authentification ne répondent pas à vos besoins, vous pouvez créer les vôtres !
Pour ce faire, il suffit de créer une classe qui hérite de
Authentication
et qui implémente les méthodes suivantes :authenticate()
configure()
(pour indiquer comment les variables de configuration sont utilisées pour configurer le provider)et les attributs suivants :
is_external
D'autres méthodes et attributs sont disponibles, voir la classe
Authentication
.Comme les autres protocoles de connexions, il suffit d'indiquer le chemin vers votre classe Python et sa configuration pour le fournisseur d'identité utilisant ce dernier !
The text was updated successfully, but these errors were encountered: