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

C# Discussion :

La méthode d'authentification demandée n'est pas prise en charge par le serveur


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Par défaut La méthode d'authentification demandée n'est pas prise en charge par le serveur


    J'ai un problème qui n'arrive pas 100% du temps sur mon poste et 100% du temps quand je l'exécute sur le serveur qui héberge la tâche.

    Sur mon poste j'obtiens l'erreur "La méthode d'authentification demandée n'est pas prise en charge par le serveur".

    Sur le serveur j'obtiens "Le serveur n'est pas opérationnel".

    Comme je l'ai dis, si j'exécute le code sur mon poste, 2 fois sur 3, le code s'exécute sans problème.

    Voici 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    public void CreerComptesEnLot(string nomDomaine, string loginDomaine, string passwordDomaine, string LoginLdap, string passwordLdap, DataTable listeComptes)
            {
                try
                {
                    // Connexion à l'annuaire (avec aucun OU de spécifié, pour faire la recherche sur tout l'A/D
                    // exemple, un étudiant qui est aussi membre du personnel
                    DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + nomDomaine + "/dc=domaine, dc=ca", loginDomaine, passwordDomaine, AuthenticationTypes.Secure);
     
                    DirectorySearcher searcher = new DirectorySearcher(Ldap);
     
                    //On parcours la liste des users du fichier
                    foreach (DataRow row in listeComptes.Rows)
                    {
                        //On filtre sur tous les objets de la catégorie User et dont le cn est le cip qu'on veut insérer
                        searcher.Filter = "(&(objectCategory=user)(cn=" + row["cip"].ToString() + "))";
     
                        //On vérifie que l'usager n'existe pas déjà
                        if (searcher.FindOne() == null)
                        {
                            Ldap.Close();
                            Ldap = null;
     
                            //Maintenant on se place dans le OU étudiants pour faire la création des comptes
                            Ldap = new DirectoryEntry("LDAP://" + nomDomaine + "/ou=Etudiants, dc=domaine, dc=ca", loginDomaine, passwordDomaine, AuthenticationTypes.Secure);
     
                            //On format la date du fichier en dd/mm/yyyy
                            string dateNaissance = row["dateNaissance"].ToString().Substring(row["dateNaissance"].ToString().Length - 2, 2);
                            dateNaissance += "/" + row["dateNaissance"].ToString().Substring(row["dateNaissance"].ToString().Length - 4, 2);
                            dateNaissance += "/" + row["dateNaissance"].ToString().Substring(0, 4);
     
                            // Création du user et initialisation de ses propriétés
                            DirectoryEntry user = Ldap.Children.Add("cn=" + row["cip"].ToString(), "User");
                            user.Properties["SAMAccountName"].Add(row["cip"].ToString());
                            user.Properties["sn"].Add(row["nom"].ToString());
                            user.Properties["givenName"].Add(row["prenom"].ToString());
                            user.Properties["userPrincipalName"].Add(row["cip"].ToString() + "@domain.ca");
                            user.Properties["displayName"].Add(row["prenom"].ToString() + " " + row["nom"].ToString());
                            user.Properties["info"].Add(row["matricule"].ToString());
     
                            //On va chercher le email du user sur le Ldap et si on ne le trouve pas on va mettre matricule@domaine.ca
                            user.Properties["mail"].Add(GetEmailFromLdapExterne(LoginLdap, passwordLdap, row["cip"].ToString(), row["matricule"].ToString()));
     
                            user.Properties["scriptPath"].Add("etudiant.bat");
     
                            user.Properties["comment"].Add(dateNaissance);
     
                            // On envoie les modifications au serveur
                            user.CommitChanges();
     
                            // On va maintenant lui définir son password. L'utilisateur doit avoir été créé
                            // et sauvé avant de pouvoir faire cette étape
                            user.Invoke("SetPassword", new object[] { row["matricule"].ToString() });
                            // On va maintenant activer le compte et faire en sorte que le mot de passe n'expire jamais (0x0200 + 0x10000)
                            user.Properties["userAccountControl"].Value = 0x10200;
                            // On envoie les modifications au serveur
                            user.CommitChanges();
     
                            //on ajoute le user dans le groupe des etudiants
                            if (AddUserToGroupEtudiant(user))
                            {
                                //On crée son répertoire personnel
                                DirectoryInfo homefolder = CreateUserHomeDirectory(@"\\serveur\etudiant$\" + row["cip"].ToString());
     
                                if (homefolder != null)
                                {
                                    //On donne les droits par défaut à l'étudiant sur son répertoire
                                    SetUserDefaultRightsOnHomeFolder(@"\\serveur\etudiant$\" + row["cip"].ToString(), row["cip"].ToString(), nomDomaine);
                                }
                            }
     
                            user.Close();
                            Log("INFO - " + row["cip"].ToString() + " créé avec succès");
                        }
                        else
                        {
                            Log("WARNING - " + row["cip"].ToString() + " n'a pas été créé car il est déjà existant (Soit dans le OU Etudiants ou dans un autre conteneur).");
                        }
                    }
                }
                catch (Exception exc)
                {
                    Log("ERROR - " + exc.Message);
                    throw exc;
                }
            }
    Cette fonction permet d'ajouter des comptes en lots à partir d'un fichier CSV dans l'active directory.

    Ce que je trouve étrange aussi, c'est que ca ne plante pas au premier enregistrement, mais après 30-40 aléatoirement. Se pourrait-il qu'il me manque un "flush" de quelques objets que ce soit?...

    Merci de votre aide à l'avance!

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Cela me parait plus être un problème de temposrisation à cause de la charge.
    Du genre de temps à autre tu executes tes méthodes, mais ton serveur n'est pas près, alors les choses se passent comme si le serveur est out (c'est un peu le cas).

    Sinon une chose :
    POURQUOI FAIRE DES DECLARATIONS DE VARIABLES DANS UNE BOUBLE ?
    Cela ne sert à rien, fait le une fois en dehors de la boucle, et tu affectes la valeur à l'intérieur !!!!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Par défaut
    Merci pour le commentaire au niveau de la définition des variables, je vais y jeter un coup d'oeil.

    Mais pour ce qui est du serveur qui ne répond pas assez vite, mais ce que je trouve drôle c'est que cette application a fonctionné pendant 2 mois avant d'arrêter de fonctionner. Et une autre chose que je ne comprends pas, c'est pourquoi mon message d'erreur n'est pas le même sur le serveur que sur mon poste local?

    Je vais essayer de mettre un genre de "retry" dans mon code pour voir si ca passe. Si ca ne fait pas, c'est que ce n'est pas le problème j'imagine...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Par défaut
    Nope, cela ne change rien J'ai essayé de faire 2 "retry" ou tout simplement d'ajouter un délai entre chaque création de compte.

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    C'est peut être un bug ailleurs dans le code que tu n'aurais pas vu car il n'apparait que dans des conditions particulière qui n'ont été réalisé récement, et pas tout le temps.
    Ce bug ne se manifeste pas directement mais provoque une anomalie qui fait planter le code posté !!!

    Enfin je reste dans l'hypothètique comme tout à l'heure, mais j'ai déjà observé cela sur des applications.


    Mais pour ce qui est du serveur qui ne répond pas assez vite, mais ce que je trouve drôle c'est que cette application a fonctionné pendant 2 mois avant d'arrêter de fonctionner.
    Le miracle de l'informatique
    Pendant 2 mois cela marche, et après on ne sait pas pourquoi mais cela merde.
    Comme windows, on l'installe, on met les softs, on l'utilise deux mois, le branche à internet que pour jouer en ligne avec des jeux achetés, ne fait que des install de jeux.
    Cela marche deux moi et après







  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 35
    Par défaut
    Bon, j'ai tracé un peu plus profondément dans le type d'erreur recu et la classe d'erreur (DirectoryServicesCOMException) recu et voici le message que j'obtiens comme ExtendedErrorMessage:

    "Failed bind for user , unsupported SASL mechanism GSS-SPNEGO specified"

    J'ai fais des recherches sur le web et à part 3-4 en thaï rien de pertinent

    De plus, j'ai mis des tags pour essayer de savoir sur quelle ligne il plante et il plante sur la ligne "if (searcher.FindOne() == null)" donc lorsqu'il recherche dans l'A/D la présence d'un usager.

    Une idée?

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

Discussions similaires

  1. erreur : "La topologie actuelle n'est pas prise en charge"
    Par chantalboyer dans le forum Installation
    Réponses: 0
    Dernier message: 28/12/2010, 19h32
  2. Réponses: 1
    Dernier message: 13/07/2010, 18h32
  3. Réponses: 4
    Dernier message: 30/05/2010, 23h35
  4. le margin en porcentage n'est pas pri en compte par le serveur tomcat
    Par kadossin dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 24/02/2009, 12h19
  5. Réponses: 6
    Dernier message: 09/07/2007, 13h49

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