IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Django et authentification LDAP [Python 3.X]


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 482
    Par défaut Django et authentification LDAP
    Bonjour,

    J'essaie de mettre en place une authentification par LDAP sur mon site web Django.

    Lors de la connexion, je voudrais récupérer les infos du user (n° de tel, email, cn)
    Dans le fichier settings.py, j'ai paramétré la variable AUTH_LDAP_USER_ATTR_MAP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    AUTH_LDAP_USER_ATTR_MAP = {
        "uid": "uid",
        "email": "email",
        "cn": "cn",
        "telephoneNumber": "telephoneNumber",
    }

    Je défini une vue user_login :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def user_login(request):
        if request.method == 'POST':
            form = LoginForm(request.POST)
            if form.is_valid():
                username = form.cleaned_data['username']
                password = form.cleaned_data['password']
                user = LDAPBackend().authenticate(request, username=username, password=password)
                print(user)
                if user:
                    login(request, user)
                    return redirect('home')
        else:
            form = LoginForm()
        return render(request, 'login.html', {'form': form})
    Mais le print(user) ne m'affiche que le username (uid), et pas les autres variables.

    Qu'est ce que j'ai oublié de paramétrer?


    Merci,
    Nico

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 035
    Par défaut
    Bonjour,

    Il faut surtout vérifier que les valeurs (et non clés) dans le dictionnaire AUTH_LDAP_USER_ATTR_MAP correspondent bien aux attributs LDAP. Souvent pour LDAP par exemple on a l'attribut mail et non email.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 482
    Par défaut
    Je suis sûr de mes valeurs, j'ai déjà utilisé la connection à ce ldap dans une appli desktop.

    Nico

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 035
    Par défaut
    À quoi ressemble la configuration de ta constante AUTHENTICATION_BACKENDS ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 482
    Par défaut
    ma config LDAP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    AUTH_LDAP_SERVER_URI = "ldap://ldap.monorganisation.fr"
     
    AUTH_LDAP_USER_SEARCH = LDAPSearch(
        "ou=monorganisation,ou=people,dc=monorganisation,dc=fr", ldap.SCOPE_SUBTREE, "(uid=%(user)s)"
    )
     
    AUTH_LDAP_CONNECTION_OPTIONS = {
        ldap.OPT_REFERRALS: 0
    }
     
    AUTH_LDAP_USER_ATTR_MAP = {
        "uid": "uid",
        "cn": "cn",
        "telephoneNumber": "telephoneNumber",
    }
     
    AUTHENTICATION_BACKENDS = (
        "django_auth_ldap.backend.LDAPBackend",
    )
    Nico

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 035
    Par défaut
    Salut,

    que donne un print(user.__dict__) ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {'_state': <django.db.models.base.ModelState object at 0x0000011F95563080>, 'id': 1, 'password': 'monpassword', 'last_login': datetime.datetime(2024, 1, 3, 14, 29, 
    20, 511435, tzinfo=<UTC>), 'is_superuser': False, 'username': 'monlogin', 'first_name': 'Nicolas', 'last_name': '', 'email': '', 'is_staff': False, 'is_active': True, 'date_joined': datetime.datet
    ime(2024, 1, 3, 10, 26, 42, 895480, tzinfo=<UTC>), 'ldap_user': <django_auth_ldap.backend._LDAPUser object at 0x0000011F95460438>, 'ldap_username': 'monlogin', 'uid': 'monlogin, 'cn': 'Prenom Nom', 'telephoneNumber': 'montel'}
    Nico

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 035
    Par défaut
    Eh bien tes attributs y sont, non ?

    Tu as bien l'objet user avec tout tes attributs, par ex. print(user.telephoneNumber) devrait donner le numéro de téléphone.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 482
    Par défaut
    ok je pensais que print(user) devait renvoyer le json avec toutes les valeurs.
    donc il faut connaitre 'à l'avance' les variables qui sont dans le ldap?

    Nico

  10. #10
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 035
    Par défaut
    Citation Envoyé par DiverSIG Voir le message
    donc il faut connaitre 'à l'avance' les variables qui sont dans le ldap?
    Non, tu as bien placé tes attributs LDAP dans ta constante AUTH_LDAP_USER_ATTR_MAP ?

    C'est que tu les connais déjà ...

    Rien ne t'empêche de créer un outil permettant de recevoir ce dictionnaire en JSON mais je vois pas trop ce que tu veux dire par "connaître à l'avance les variables" étant donné que tu es censé les connaître pour les avoir mis en place.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Authentification ldap avec django
    Par GabrielDJVC dans le forum Langages serveur
    Réponses: 1
    Dernier message: 21/01/2023, 02h45
  2. [W1][N1][M1][D1] Echec de l'authentification LDAP
    Par linux dans le forum Contribuez
    Réponses: 8
    Dernier message: 13/07/2006, 16h46
  3. Réponses: 3
    Dernier message: 14/03/2006, 11h38
  4. [VB.Net]Comment effectuer l'Authentification LDAP ?
    Par le Daoud dans le forum VB.NET
    Réponses: 6
    Dernier message: 28/02/2006, 10h09
  5. Authentification ldap pour apache sous Windows
    Par beastman007 dans le forum Apache
    Réponses: 3
    Dernier message: 13/07/2005, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo