geOrchestra - Géocontrib : accès refusé authentifié

Bonjour,

Je viens de mettre en place votre Géocontrib (6.4.1 front + back) avec geOrchestra (24.0.4 docker) et je pense avoir identifié un petit « bug ».

Dans la console admin django, j’ai fait l’import d’un user A, mais pas du user B qui se trouve dans une autre OU.

Quand je me connecte à geOrchestra avec l’user A, j’ai accès à Géocontrib avec les accès liés à sont rôles.
Si je ne suis pas connecté, donc en anonyme, j’ai accès à Géocontrib, sans accès particuliers.
Si je me connecte à geOrchestra avec l’user B, je n’ai plus du tout accès à Géocontrib, j’ai une erreur 403, étant donné qu’il n’a pas été importé. Je m’attendais plutôt qu’un user connecté à geOrchestra et qui n’a pas été synchronisé dans django ai la même vue que les users anonymes.

Le souci se trouver dans ce fichier : plugin_georchestra/auth/middleware.py · develop · GéoContrib / Géocontrib Django · GitLab

Dans la fonction process_request(), si le sso est actif, on rentre dans :

# Cas 1 : Déconnexion lorsque l'utilisateur est authentifié dans l'application
            # mais que le SSO n'est plus actif.
            if not sid_user_id and request.user.is_authenticated:

Ou dans :

# Cas 2: Si le SSO est actif et qu'un identifiant utilisateur envoyé par geOrchestra est présent :
            elif sid_user_id:

N’ayant pas de Else, l’accès anonyme est possible vu qu’il n’y a pas d’erreurs si je ne remplis aucune de ces conditions (donc en anonyme), puisque la fonction ne retourne rien, mais de ce fait dans le cas 2, la partie de code qui fait :

try:
                    # Recherche l'utilisateur correspondant à l'identifiant dans la base de données.
                    proxy_user = User.objects.get(username=sid_user_id)
                except User.DoesNotExist as e:
                    # Si l'utilisateur n'existe pas, log l'erreur et refuse l'accès.
                    logger.debug(e)
                    raise PermissionDenied()

ne semble pas pertinente, car il me suffit de se déconnecter de geOrchestra pour avoir accès à l’application.

Car pour le coup, ça ne permet pas une utilisation fluide, puisque les personnes connectées pour lesquelles je ne vais pas avoir synchronisé avec l’application (car pas besoin d’éditer et projets en accès libre) vont devoir se déconnecter pour les visualiser.

Si vous trouvez ma réflexion pertinente, merci par avance pour les changements, je l’ai fait de mon côté en attendant, j’ai juste ajouté return avant raise PermissionDenied()

Très bonne application en tout cas !

P.S : j’ai le bouton se connecter qui reste en haut à droite par contre, je ne sais pas si c’est normal avec le fonctionnement georchestra.

Bonjour,

Merci beaucoup pour ce retour sur l’application :blush:

Vous avez raison, dans ce cas isolé que nous n’avions pas identifié, il n’y a pas de raison de bloquer l’accès à l’application. Si l’utilisateur est connecté à geOrchestra, mais que son compte n’est pas synchronisé dans Geocontrib, il peut toujours accéder à l’application en tant qu’utilisateur anonyme, il n’y a pas de différence.

L’analyse du code est exacte et la solution proposée convient très bien, nous l’intégrerons dans une version 6.4.2, merci de nous avoir remonté ce comportement et pour votre suggestion éprouvée.

Pour le bouton de connexion, lorsqu’on active un service d’authentification SSO comme geOrchestra, habituellement on le cache en ajoutant la variable d’environnement DISABLE_LOGIN_BUTTON=true au même endroit où vous avez dû renseigner la variable LOG_URL.

Merci pour votre contribution et bonne utilisation de Geocontrib !

Bonjour,

Avec plaisir ! Et merci, j’avais oublié de regarder dans les variables du front, j’étais focus sur le back.

Je vous souhaite une bonne journée :slight_smile: