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

Delphi Discussion :

Connexion serveur LDAP avec Delphi


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Connexion serveur LDAP avec Delphi
    Bonjour,

    J'aurais besoin de créer une solution d'authentification qui utiliserait en fait le login et password d'un utilisateur d'un serveur LDAP. Pour cela il faudrait que je me connecte à un serveur LDAP et que je valide ou non la connexion avec le combo login/password (j'imagine).
    Le problème c'est que j'en suis quasiment au stade zéro. J'ai effectué beaucoup de recherches, sur ce forum, sur d'autres anglais et français, et je ne trouve rien de convaincant. Soit je n'arrive pas à mettre en oeuvre la solution, soit elle est dépassée et ne compile même plus.
    De plus, j'aurais voulu que cette solution fonctionne à la fois sous windows, et à la fois sous linux, donc j'imagine que les solutions à base de activeds.dll sont donc à proscrire pour ce cas...

    Ce qui m'a paru le plus intéressant pour le moment est le travail de Paul TOTH que voici. Malheureusement je n'arrive même pas à passer la case connexion (honte à moi ?).

    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
     
    procedure login(const user,pass:string; var id,FullName:string);
    var
     ldap:integer;
     dn  :string;
    begin
     ldap:=LDAPOpen('ldap_serveur');
     if (ldap=INVALID_SOCKET) then raise Exception.Create('Serveur de sécurité introuvable');
     try
      dn:=LDAPSearch(ldap,user);                             
      if (dn='') then raise Exception.Create('Compte inconnu');
      if LDAPBind(ldap,dn,pass)=false then raise Exception.Create('Mot de passe invalide');
      id:=LDAPAttribute(ldap,dn,'EmployeeID');
      if id='' then raise Exception.Create('Annuaire incomplet');
      FullName:=LDAPAttribute(ldap,dn,'cn');
     finally
      LDAPClose(ldap);
     end;
    end;
    J'ai trouvé un serveur LDAP de test sur le web, avec lequel j'arrive à me connecter avec Apache Studio. Voici le lien pour les curieux.

    Donc dans le code ci-dessus je remplace 'ldap_serveur' par 'ldap.forumsys.com' mais erreur... Suis-je totalement à côté de la plaque ?

    Merci beaucoup à ceux qui m'aideront.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Bonjour,

    Attention, cette unité d'un autre age utilise des String Ansi, le code ne peut pas fonctionner sur un Delphi >= 2009

    il faut au minimum remplacer tous les String par AnsiString ou RawByteString et les Char par AnsiChar...ou réécrire le tout avec un type binaire comme TBytes mais celui-ci n'offre pas la même souplesse.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Ah, je me disais bien aussi...
    Du coup quelle serait la meilleure solution selon toi ? La seule que j'ai vue pour l'instant c'est le composant IPWorks mais à 2k balles le composant...
    Connaîtrais-tu des alternatives ?

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par MivGabin Voir le message
    Ah, je me disais bien aussi...
    Du coup quelle serait la meilleure solution selon toi ? La seule que j'ai vue pour l'instant c'est le composant IPWorks mais à 2k balles le composant...
    Connaîtrais-tu des alternatives ?
    si tu ne veux pas tester le Recherche/Remplace de String en RawByteString, je peux te facturer la prestation

    sinon je crois savoir que Windows possède une API LDAP mais je ne l'ai jamais utilisée et je ne sais pas si elle est déclarée en standard dans Delphi
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Malheureusement même en changeant les strings, je ne parviens à aucun résultat.
    Concernant l'API windows, j'imagine qu'elle ne me permettrait que la connexion à un active directory et exit l'OpenLDAP?

  6. #6
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 084
    Points : 5 604
    Points
    5 604
    Par défaut
    Pourquoi ne pas utiliser une connexion ADO ? (TADOConnection) avec le provider ADsDSOObject...

    Voici un petit exemple trouvé rapidement http://delphi.cjcsoft.net/viewthread.php?tid=45953
    Mais y'en a plein d'autres sur la façon d'accéder à LDAP via le fournisseur d'accès MSAD pour OLEBD

    https://docs.microsoft.com/fr-fr/sql...ql-server-2017

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour à tous,
    Je réponds tardivement, mais pour apporter la solution qui m'a convenu et qui permettra peut-être à d'autres de s'en sortir par la suite.
    Tout d'abord, pourquoi ne pas avoir utiliser une connexion ADO ? Car je ne voulais pas m'encombrer des requêtes etc, alors que je voulais simplement vérifier l'authentification.

    Donc, j'ai importé activeds de la façon suivante :
    Depuis la console windows exécuter la commande suivante : "tlibimp -P C: \ Windows \ System32 \ activeds.tlb"
    Puis intégrer le .pas à son projet.

    Puis déclarer la fonction ADSOpenObject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function ADsOpenObject(lpszPathName: PWideChar;
      lpszUserName: PWideChar; lpszPassword: PWideChar;
      dwReserved: LongInt; const riid: TGUID; out obj): HResult;
       stdcall; external 'activeds.dll';
    Puis lancer la connexion

    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
     
    var
          User, Password, DestName: string;
          UserT: IUnknown;
          UserAD : IADs;
        begin
          DestName := 'LDAP://192.168.xxx.xxx/CN=' + 'compteCherché + ',CN=users,DC=domain,DC=com';
          User := 'admin;
          Password := 'PWD';
     
          //Connexion
          AdsOpenObject( StringToOleStr(DestName),StringToOleStr(User),
          StringToOleStr(Password), ADS_SECURE_AUTHENTICATION, IID_IADs, UserT);
          UserAD := UserT as IADs;
     
          //Affichage des informations
          EdtTelephoneNumber.Text := UserAD.Get('sn');
    Je me suis en grande partie inspiré de ce topic : https://www.developpez.net/forums/d5...ive-directory/
    qui m'a beaucoup aidé.

    Pour travailler avec l'AD je conseille d'utiliser Apache Studio qui permet de vraiment bien visualiser son AD.

    Merci à ceux qui ont pris du temps pour m'aider.

  8. #8
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Connexion LDAP avec ADO
    Bonjour,

    Débutant avec LDAP, j'ai essayé de faire un test de requête LDAP avec Delphi 10.2 et des composants ADO (TADOConnection + TADOQuery) sur le serveur de test ldap.forumsys.com.

    ADOConnection1.ConnectionString =
    Provider=ADsDSOObject;Encrypt Password=False;Integrated Security=SSPI;Data Source=ldap://ldap.forumsys.com:389;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648

    ADOQuery1.SQL.Text =
    select * from 'dc=example' where objectClass = 'USER' order by sn

    Quelles que soient les variantes que j'utilise, j'obtiens toujours l'erreur "La table n'existe pas"

    Pourtant ce serveur LDAP de test est bien actif:
    Nom : Capture.PNG
Affichages : 1154
Taille : 40,4 Ko

    Je ne trouve pas d'exemple concret sur le web
    Quelqu'un peut m'aider ?

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

Discussions similaires

  1. connexion à BD interbase avec Delphi
    Par Abou Zar dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/06/2010, 19h25
  2. Problème de connexion serveur ftp avec vsftpd
    Par petitclem dans le forum Réseau
    Réponses: 22
    Dernier message: 18/06/2008, 15h22
  3. [AD] se connecter au serveur LDAP avec un client LDAP de base
    Par novices dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 24/04/2007, 18h17
  4. Réponses: 5
    Dernier message: 15/03/2007, 09h52
  5. connexion a ldap avec java
    Par himachalene dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/12/2006, 19h15

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