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

ASP.NET Discussion :

possibilité de changer le mot de passe Active Directory via une application Web ?


Sujet :

ASP.NET

  1. #1
    Membre confirmé

    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Points : 562
    Points
    562
    Par défaut possibilité de changer le mot de passe Active Directory via une application Web ?
    Bonjour

    Je me pose juste une question à 2 choix (chouette):
    -je suis nulle
    -ou c'est impossible ?

    (ça fait juste 2 jours que je bosse dessus sans avancer d'un poil )
    Est-il donc possible de modifier le mot de passe d'un compte Active Directory à partir d'une application Web C# ?

    J'ai trouvé pas mal de codes possibles pour ça, mais ça ne marche que pour des applications locales, dès que je passe sur le site... Pan! l'exception ...
    Je sais plus quoi tenter ... HELP !

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bonjour,

    C'est tout à fait possible, du moment que les droits sont bien paramétrés. Qu'est ce qu'un code C# dans le code-behind d'une application Web ? Un code qui s'exécute localement sur le serveur.

    Tu as un article (date un peu, mais te donne un bon aperçu) de Thomas Lebrun.

    Ensuite, question sécurité, utilises-tu un compte applicatif ? Sous quel compte s'exécute ton code ? Et quelle est l'exception précisément (elle donne en générale une idée claire sur les droits manquants à ton compte applicatif).

    En espérant t'avoir aidé.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    Qu'est ce qu'un code C# dans le code-behind d'une application Web ? Un code qui s'exécute localement sur le serveur.
    Certes mais cependant il y a de fortes chances que le serveur IIS ne soit pas le meme serveur que le controleur de domaine. ceci etant dit, je pense également que c'est possible si le programme utilise un compte administrateur du domaine.

  4. #4
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    il y a de fortes chances que le serveur IIS ne soit pas le meme serveur que le controleur de domaine
    C'est pas faux . Avec la fatigue je n'avais pas pensé à cet aspect.

    Mais, dans ce cas, un petit service windows à coder et installer sur le serveur où est situé le contrôleur de domaine. Une petite communication entre l'appli web et le service en remoting (par exemple), et le tour est joué.

    Pour exécuter un package SSIS, c'est un peu le même principe (on peut passer par des procédures stockées, mais les restrictions de sécurité imposées par les DBA font souvent que cette solution n'est pas possible). On utilise alors le namespace Microsoft.SqlServer.Dts.Runtime. Problème, celui ne fonctionne qu'en localhost => il faut obligatoirement être sur le serveur où tourne SQL Server. La solution : un service appelé en remoting, qui se chargera lui de transmettre notre demande.

    Lol, on va appeler cela le Pattern du Téléphone Arabe

    Bref, j'espère que tu as trouvé ton bonheur Erielle ?

  5. #5
    Membre confirmé

    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Points : 562
    Points
    562
    Par défaut
    En fait, c'est le CommitChanges que je ne peux pas utiliser.

    Sinon, mon serveur IIS est le même que le contrôleur de domaine. Je pense que l'appli s'exécute sous mon compte admin du domaine.

    Ca me renvoie l'erreur suivante :
    monUserSystem.Runtime.InteropServices.COMException (0x80004005): Erreur non spécifiée à System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.PutEx(Int32 lnControlCode, String bstrName, Object vProp) à System.DirectoryServices.PropertyValueCollection.set_Value(Object value) à _Default.BtnValid_Click(Object sender, EventArgs e) dans c:\inetpub\wwwroot\sitweb\Default.aspx.cs:ligne 107Erreur non spécifiée Active Directory
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    DirectoryEntry ObjUser = new DirectoryEntry("LDAP://monIP/CN=" + MonUser + ",cheminDuUser");
     
                  try
                        {
                            /* Section critique - L'utilisateur a le droit de modifier son mot de passe */
                            //ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
                            int val;
                            const long ADS_ACETYPE_ACCESS_ALLOWED = 0x00000;
                            const long ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = 0x00005;
                            val = (int) ADS_ACETYPE_ACCESS_ALLOWED;                        
                            ObjUser.Properties["userAccountControl"].Value = ADS_ACETYPE_ACCESS_ALLOWED;
                            ObjUser.Properties["userAccountControl"].Value = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT;
                            //ObjUser.CommitChanges();
     
     
     
                            string dname = ObjUser.Properties["displayName"].Value.ToString();
                            string authtype = ObjUser.AuthenticationType.ToString();
     
                            ObjUser.Invoke("ChangePassword", new object[] { MonExPwd , MonPwd});                        
                            ObjUser.Properties["userAccountControl"].Value = 512;
                            ObjUser.Properties["userAccountControl"].Value = 0x0200;
                            ObjUser.Properties["pwdLastSet"].Value = 0;
     
                            // On envoie les modifications au serveur
                            string ppcache = ObjUser.UsePropertyCache.ToString();
                           // ObjUser.CommitChanges();
                            labEchecAuth.Text = "Mot de passe changé!!!";                        
                        } 
                    catch (Exception ex1)
                    {
     
                        ldapConn.Disconnect();
                        ldapConn2.Disconnect();
                        labEchecAuth.Text = MonUser + ex1.GetBaseException() + ex1.Message + ex1.Source;
                        return;
                    }
    Merci pour vos réponses.

Discussions similaires

  1. synchronisation mots de passe Active Directory via IIFP sans PCNS
    Par CGR15121 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 20/03/2012, 17h36
  2. utilisateur: possibilité de changer son mot de passe
    Par kpatson dans le forum Administration
    Réponses: 2
    Dernier message: 18/09/2011, 01h45
  3. Réponses: 6
    Dernier message: 18/08/2011, 12h27
  4. Réponses: 1
    Dernier message: 19/07/2011, 15h35
  5. [LDAP] Mots de passe active directory via php
    Par chtijule dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/08/2009, 10h54

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