[RESOLU][C#] Récupérer Password d'un utilisateur référencé sur ActiveDirectory

Hello les Geeks B)

Voilà, en ce moment, j’ai une application (en C#) qui doit récupérer une liste d’utilisateurs avec leur password contenu dans ActiveDirectory afin de mettre à jour une BDD SQL Server. Le problème, c’est que je n’arrive pas à récupérer le password.

Y a t il un moyen (via une API ou autre) pour récupérer ou au moins pouvoir comparer le password d’ActiveDirectory avec un password (en string ou encodé en binaire) ?

Je n’ai trouvé aucune solution chez mon ami google.

[code] DirectoryEntry de = GetDirectoryEntry();
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;

		deSearch.Filter = "(SAMAccountName=" + strUserLogin + ")";
		deSearch.PropertiesToLoad.Add("displayName");
		deSearch.PropertiesToLoad.Add("userPassword");
		SearchResult result = deSearch.FindOne();

					DirEntry.Properties["userPassword"].Value.ToString();[/code]  

Que je fasse :
DirEntry.Properties[“userPassword”].Value.ToString();

ou

DirEntry.Password;

J’obtiens NULL.

Je suis pas expert en C#, mais j’ose esperer que tu ne pourra JAMAIS recupéré le mot de passe depuis l’AD, imagine le trou de sécurité sinon.
A mon avis, en utilisant le protocole LDAP, tu interroge AD en fournissant un login et un mot de passe, et il te repond si ca matche ou pas. Apres, comment le ldap se gère en C#, j’en sais pas grand chose, désolé…

peut être que ce poste pourra t’aider si tu te sers de l’auth. par ad.
(ce qu’il faut pas dire…)

De mémoire, la réponse est catégoriquement non, il n’est pas possible de récupérer le mot de passe, et encore heureux. Mais pourquoi veux tu le récupérer à la base? il y a sans doute moyen de contourner…

En fait, on avait plutot penser à une authentification basic via Base de données avec un login et un password. Au final, le client aimerait pouvoir utiliser le même password que celui qui est référencé sur ActiveDirectory (pour lequel le password doit etre changé X mois ou je ne sais pas sur quel autre critère).

Et en gros, mon executable sera lancé 1 fois par mois (par exemple), mettera à jour les password et autres données venant de l’AD vers la base SQL Server. M’enfin, voilà, si c’est vraiment impossible (même juste en récupérant la chaine cryptée), je verrais ca avec mon chef de projet pour une solution alternative.

Edit : Tous les utilisateurs de l’AD n’ont pas forcément accès à l’appli web.

[quote=« fser, post:3, topic: 45517 »]peut être que ce poste pourra t’aider si tu te sers de l’auth. par ad.
(ce qu’il faut pas dire…)[/quote]

C’est une idée que j’avais pensé mais vu que ca collais pas avec ce qui était demandé, bah :confused:

[quote=“MetalDestroyer, post:5, topic: 45517”]En fait, on avait plutot penser à une authentification basic via Base de données avec un login et un password. Au final, le client aimerait pouvoir utiliser le même password que celui qui est référencé sur ActiveDirectory (pour lequel le password doit etre changé X mois ou je ne sais pas sur quel autre critère).

Et en gros, mon executable sera lancé 1 fois par mois (par exemple), mettera à jour les password et autres données venant de l’AD vers la base SQL Server. M’enfin, voilà, si c’est vraiment impossible (même juste en récupérant la chaine cryptée), je verrais ca avec mon chef de projet pour une solution alternative.

Edit : Tous les utilisateurs de l’AD n’ont pas forcément accès à l’appli web.[/quote]
Oui c’est vraiment impossible. Et rhaaa mais y a des vrais moyens de faire ca proprement B) en tous cas il y a clairement aucun moyen d’extraire le mdp sous une forme utilisable… Y a meme des moyens de passer les tokens cross domain pour authentifier des gens venant d’un domaine sur un autre domaine par internet/intranet. Kerberos c’est malin, apres les details de comment ou quoi, j’ai une vague idee en tete, mais je suis sur qu’il y a des docs propre qui t’expliqueront ca bien mieux que moi. Un exemple tout con c’est https://mail.microsoft.com (deja c’est https) ca me permet de matter mon mail avec mon mdp du domaine et ca le fait pas en copiant dans une db, la db, c’est AD.

Pfff, ils n'avaient qu'à stocker le mot de passe en clair dans l'AD. Pourquoi se compliquer la vie avec des bidules aussi insignifiants que la sécurité, faut savoir vivre dangeureusement !

Sinon, je suis le seul qui soit choqué quand il parle d’un client de son super bidouillage d’enfer ? B)

Bah il cherche a faire marcher son truc, c’est pas le plus simple a comprendre la delegation et les tokens. Il demande comment faire, c’est deja ca. De ses participations precedentes, me semble pas que MetalDestroyer soit un habitue des solutions a la degueu B)

[quote=“MetalDestroyer, post:5, topic: 45517”]En fait, on avait plutot penser à une authentification basic via Base de données avec un login et un password. Au final, le client aimerait pouvoir utiliser le même password que celui qui est référencé sur ActiveDirectory (pour lequel le password doit etre changé X mois ou je ne sais pas sur quel autre critère).

Et en gros, mon executable sera lancé 1 fois par mois (par exemple), mettera à jour les password et autres données venant de l’AD vers la base SQL Server. M’enfin, voilà, si c’est vraiment impossible (même juste en récupérant la chaine cryptée), je verrais ca avec mon chef de projet pour une solution alternative.

Edit : Tous les utilisateurs de l’AD n’ont pas forcément accès à l’appli web.[/quote]

Ouaip bah comme disait Glop, il n’y a pas d’intérêt de stocker le mdp dans la base, c’est AD ta base d’authentification, et IIS te fournit le mécanisme qui va bien. Au pire tu peux recopier les autres infos dans ta base et de les retrouver en utilisant le login. Pour la gestion des droits, AD te fournit également tout ce qu’il faut normalement, et via les implémentations fournient de base de RoleProvider, tu devrais largement arriver à faire ce que tu veux pour gérer les droits.

J’espère que ces quelques pistes t’aideront B)

Hopla, oubliez tout. On a revu le systeme d’authentification en expliquant bien au client le pkoi. Donc, finalement, on se connecte sur l’appli automatiquement une fois authentifié sous Windows et tant que la personne est référencé dans la base.

Donc problème résolu, même si on ne connaitra jamais la réponse excepté le IMPOSSIBLE B)

[quote=“MetalDestroyer, post:11, topic: 45517”]Hopla, oubliez tout. On a revu le systeme d’authentification en expliquant bien au client le pkoi. Donc, finalement, on se connecte sur l’appli automatiquement une fois authentifié sous Windows et tant que la personne est référencé dans la base.

Donc problème résolu, même si on ne connaitra jamais la réponse excepté le IMPOSSIBLE B)[/quote]

C’est pas que c’était impossible, c’était juste une incohérence que de vouloir duppliquer les mots de passe alors que IIS fournit un mécanisme d’authentification Windows, et que .NET récupère toutes les infos B)