Projet

Général

Profil

Development #43585

Accès aux attributs LDAP suite à une reconnexion en tant qu'un autre utilisateur

Ajouté par Benjamin Renard il y a presque 4 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
03 juin 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Suite aux dernières évolutions de la fonctionnalité de reconnexion en tant qu'un autre utilisateur, les attributs issus de l'annuaire LDAP ne sont plus propagés aux services auxquels l'utilisateur tente d'accéder. Seuls les attributs stockés dans Authentic sont accessibles (identifiant & courriel par exemple).

Cette régression est assez gênante, car il est assez courant de mettre en place un filtrage d'accès par exemple sur une valeur issue d'un attribut LDAP et dans ce cas précis, l'utilisateur se voit interdire l'accès. La fonctionnalité de reconnexion en tant qu'un autre utilisateur perd donc beaucoup de son intérêt avec cette contrainte.

Serait-il envisageable de corriger cela ?

Exemple pour reproduire ce problème:
  1. configurer un service (via SAML par exemple) avec un attribut issu de l'annuaire
  2. se connecter avec un utilisateur admin
  3. dans l'interface /manages/users/XXX, se reconnecter avec un autre utilisateur
  4. tenter d'accéder au service configuré initialement

L'attribut SAML ne sera alors pas renseigné bien qu'existant dans l'annuaire LDAP.


Fichiers

Révisions associées

Révision c70f2059 (diff)
Ajouté par Benjamin Dauvergne il y a environ 3 ans

views: use LDAPBackendPasswordLost to switch to LDAP account (#43585)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Ça n'a jamais marché comme cela avant, les attributs LDAP ont toujours été indisponible; c'était un effet de bord qui faisait que si l'utilisateur précédent venait du backend LDAP le suivant aussi (mais a priori en sens inverse ça devait bugger) :

-def su(request, username, redirect_url='/'):
-    '''To use this view add:
-
-       url(r'^su/(?P<username>.*)/$', 'authentic2.views.su', {'redirect_url': '/'}),
-    '''
-    if request.user.is_superuser or request.session.get('has_superuser_power'):
-        su_user = shortcuts.get_object_or_404(User, username=username)
-        if su_user.is_active:
-            request.session[SESSION_KEY] = su_user.id
-            request.session['has_superuser_power'] = True
-            return http.HttpResponseRedirect(redirect_url)
-    else:
-        return http.HttpResponseRedirect('/')

Je faisais des manipulations limites en session, mais je ne changeais pas le backend, il faudrait traiter cela de façon particulière, à la manière du backend LDAPBackendPasswordLost.

#2

Mis à jour par Loïc Dachary il y a environ 3 ans

Pour archive, bien que LDAPBackendPasswordLost fonctionne comme attendu les attributs ne sont pas disponibles, mais pour une autre raison

#3

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

  • Assigné à mis à Benjamin Dauvergne
#4

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

Au dessus de #52638 pour avoir un simulate_authentication() qui respecte le user.backend déjà présent.

#5

Mis à jour par Loïc Dachary il y a environ 3 ans

Après rebase sur main (#52638 a été merge) j'ai pu vérifier que le test passe.

#6

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

  • Statut changé de Solution proposée à Résolu (à déployer)
commit c70f205987e6660edeb4a6dbed06bf19b6905b9b
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Apr 1 17:36:54 2021 +0200

    views: use LDAPBackendPasswordLost to switch to LDAP account (#43585)
#7

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF