Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C# .NET] Connexion à l'Active Directory

    11 octobre 2011 à 10:59:53

    Bonjour à tous,

    Je créé une application web où je demande à l'utilisateur de se connecter. Ses identifiants doivent être ceux de son compte Active Directory.
    Une fois ses identifiants saisis, j'authentifie donc l'utilisateur sur l'Active Directory et c'est là que ça pêche.

    Voici mon code :
    private DirectoryEntry getDirectoryEntry(string login, string password, bool ssl, bool anonymous)
    {
        string ServeurAcd = "LDAP://" + ConfigurationSettings.AppSettings["LdapServer"].ToString();
    
        return new DirectoryEntry(ServeurAcd + (ssl ? ":636" : "") + ",o=acd,ou=People", "loginname=" + login, password, anonymous == true ? AuthenticationTypes.Anonymous : AuthenticationTypes.ServerBind);
    }// getDirectoryEntry()
    

    Ici, ssl= false et anonymous = false
    Quand je me connecte avec mes bons identifiants, j'ai ce message d'erreur : Échec d'ouverture de session : nom d'utilisateur inconnu ou mot de passe incorrect

    Pourquoi ?
    • Partager sur Facebook
    • Partager sur Twitter
      11 octobre 2011 à 11:38:43

      Es-tu sûr de t'y prendre correctement ? :euh:

      Plutôt que de faire des recherches "à la mano" dans l'AD, tu devrais à priori utiliser un ActiveDirectoryMembershipProvider qui permet d'utiliser l'API standard d'authentification d'ASP.NET en se basant sur l'AD.

      Une fois le provider configuré correctement, il suffit alors d'écrire ce code pour authentifier ton utilisateur :

      using System.Web.Security;
      // ...
      
      if(Membership.ValidateUser(login, password))
      {
          // l'utilisateur est authentifié
          // on crée un cookie pour maintenir son authentification d'une requête à l'autre
          FormsAuthentication.SetAuthCookie(login, false);
      }
      else
      {
          // identifiants incorrects
      }
      


      Ce code est standard et est valable quelle que soit la manière dont sont stockés les identifiants des utilisateurs (dans l'AD, dans une DB, ...). La différence se situe au niveau du fichier de configuration. L'avantage donc c'est que ton code n'a pas besoin de manipuler l'AD directement ;)
      • Partager sur Facebook
      • Partager sur Twitter
        11 octobre 2011 à 12:59:15

        J'ai lu un peu la doc dans le lien que tu as donné sur ActiveDirectoryMembershipProvider et ça reste un peu flou, il est dit qu'on peut stocker l'adresse du serveur LDAP dans web.config. Mais comment dit à mon objet Membership de se connecter à cette adresse, de lui dire de regarder dans tel ou etc... ?
        • Partager sur Facebook
        • Partager sur Twitter
          11 octobre 2011 à 13:59:52

          Par configuration, comme indiqué dans le bas de la page :)

          La classe Membership fait appel à un objet MembershipProvider pour faire le lien avec la source de données qui contient les comptes utilisateurs. En fonction du type de provider, on peut cibler des sources de données différentes. Par exemple la classe ActiveDirectotyMembershipProvider est conçue pour cibler l'Active Directory.

          Les sections
          <connectionStrings>
            <!-- à remplacer par la bonne chaine -->
            <add name="ADService" connectionString="LDAP://ldapServer/" />
          </connectionStrings>
          
          <system.web>
            <membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
              <providers>
                <add name="AspNetActiveDirectoryMembershipProvider"
                  type="System.Web.Security.ActiveDirectoryMembershipProvider,
                  System.Web, Version=1.0.3600, Culture=neutral,
                  PublicKeyToken=b03f5f7f11d50a3a"
                  connectionStringName="ADService" />
              </providers>
            </membership>
          </system.web>
          

          du fichier de configuration indiquent à l'application qu'il faut utiliser un ActiveDirectoryMembershipProvider. Celui-ci est configuré avec les paramètres dont il a besoin, en particulier la chaine de connexion à l'AD. Il se peut qu'un compte utilisateur spécial soit aussi nécessaire si cette chaine est sécurisée.

          Pour ton OU, sauf erreur de ma part tu devrais pouvoir le spécifier dans la connectionString :euh:
          • Partager sur Facebook
          • Partager sur Twitter

          [C# .NET] Connexion à l'Active Directory

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown