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 :

Authentification avec une AD


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Par défaut Authentification avec une AD
    Bonjour,

    Je dois réaliser lors dans le cadre d'un projet une authentification par active directory. Je dois donc récupérer le nom d'utilisateur ainsi que le mot de passe de l'utilisateur concerné.
    Il faut savoir qu'il existe plusieurs manières de s'authentifier: soit le nom est déjà dans notre base de donnée et dans ce que cas là, on saisit son id et mot de passe, soit par l’intermédiaire de l'AD, qui est simplement une checkbox que l'on coche si l'on souhaite activer cette option.
    Voici, une partie de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function TSCHUtilisateur_Basic.IsIdentifiedAD(pPasswd, pDomain: String): Boolean;
    var
      lDom: IADsUser;
    begin
      Result := False;
      if (pDomain <> EmptyStr) and (vLoginAD <> EmptyStr) then
      begin
        try
          Result := Succeeded(ADsOpenObject(KWinNT + KSS + pDomain + '/' + vLoginAD, vLoginAD, pPasswd, ADS_SECURE_AUTHENTICATION, IADsUser, lDom));
        except
        end;
      end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      if (vUtilisateur.Login <> EmptyStr) and // Utilisateur trouvé
          (pCB or // Code-Barre
          ((not pCB) and vUtilisateur.IsIdentified(lbledPassword.Text)) or // Login //lbledPassword est le champ qui contient le mot de passe saisis lors du lancement
          ((not pCB) and TContexteTraceability.Contexte.ADUsed and vUtilisateur.IsIdentifiedAD(lbledPassword.Text, TContexteTraceability.Contexte.ADDomain))
    Il se passe que mon résultat est toujours en faux. Auriez vous une explication ?
    J'utilise pour information Delphi XE2
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    il faudrait vérifier si le "pCB and not pCB" est bien écrit

    j'ai un peu exagéré sur les ( ) pour mieux comprendre l'imbrication des tests
    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
     
     
    if (vUtilisateur.Login <> EmptyStr) // Utilisateur trouvé
      and (
        pCB // Code-Barre
        or (
          not pCB 
          and (
            vUtilisateur.IsIdentified(lbledPassword.Text)
            or (
              TContexteTraceability.Contexte.ADUsed 
              and vUtilisateur.IsIdentifiedAD(lbledPassword.Text, TContexteTraceability.Contexte.ADDomain)
            )
          )
        )
      )
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Quel est le résultat qui est faux? Celui de IsIdentifiedAD ou celui du code suivant?
    Pour le domaine, on devrait avoir KWinNT + KSS + pDomain de la forme 'WinNT://mondomaine.dom'

    Sinon je ne vois pas de souci (la factorisation de ShaiLeTroll est plus lisible).

    Pour information, j'ai utilisé les unités an pièces jointes pour l'authentification AD, avec le code suivant
    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
     
    var
      adsi:TADSI;
    begin
    adsi :=  TADSI.Create(nil);
    adsi.LoginPassword := 'MyPassword';
    adsi.LoginUserName := 'MyUser';
    if adsi.Authenticate('MyDomain.dom','','') then
    begin
      ShowMessage('Succeed');
    end
    else
    begin
      ShowMessage('Failed');
    end;
    adsi.Free;
    Fichiers attachés Fichiers attachés

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Par défaut
    Merci pour vos divers réponses !
    Quel est le résultat qui est faux? Celui de IsIdentifiedAD ou celui du code suivant?
    C'est le résultat de ma fonction IsIdentifiedAD en effet.
    J'essaierai vos differentes approches demain et vous ferez parvenir les résultats.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Par défaut
    Bonjour,

    Je viens de réaliser le test avec les fichiers que tu viens de me fournir. J'obtiens une exception du type que le 'groupe spécifié n'existe pas'. L'exception se produit lorsque ADsOpenObject est appelé.
    Il doit avoir quelque chose qui m'échappe, mais je ne vois pas quoi.
    Vous trouverez ci-dessous le code de ma fonction modifié

    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
    20
     
    function TSCHUtilisateur_Basic.IsIdentifiedAD(pPasswd, pDomain: String): Boolean;
    var
      lDom: IADsUser;
      adsi: TADSI;
    begin
      Result := False;
      adsi := TADSI.Create(nil);
      adsi.LoginUserName := vLoginAD;
      adsi.LoginPassword := pPasswd;
     
      if adsi.Authenticate(pDomain, vLoginAD, '') then
      begin
        Result := Succeeded(ADsOpenObject(KWinNT + KSS + pDomain + '/'+ vLoginAD, vLoginAD, pPasswd, ADS_SECURE_AUTHENTICATION, IADsUser, lDom));
      end
      else
      begin
        Result:= False;
      end;
      adsi.Free;
    Merci d'avance,

Discussions similaires

  1. [Débutant] Problème authentification avec une application Azure
    Par script73 dans le forum ASP.NET MVC
    Réponses: 4
    Dernier message: 20/05/2019, 21h16
  2. authentification avec une variable de session
    Par laurentSc dans le forum Langage
    Réponses: 6
    Dernier message: 03/11/2016, 11h36
  3. [2.x] Connexion, authentification avec une bdd existante
    Par edd83 dans le forum Symfony
    Réponses: 51
    Dernier message: 08/02/2013, 16h18
  4. comment faire une authentification avec SSL
    Par opiece dans le forum Apache
    Réponses: 3
    Dernier message: 04/06/2007, 17h38
  5. [debutant]problème avec une authentification
    Par sissi25 dans le forum JDBC
    Réponses: 11
    Dernier message: 30/01/2007, 22h51

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