C# Active Directory: Obtenir le nom de domaine de l'utilisateur?

Je sais que ce type de question a déjà été posées, mais d'autres méthodes échouent moi en ce moment.

Comme il tient notre service windows sondages AD, donné un LDAP (c'est à dire LDAP://10.32.16.80) et une liste de groupes d'utilisateurs au sein de ce serveur de publicité pour la recherche.
Il récupère tous les utilisateurs au sein de ces groupes, de façon récursive de la recherche des groupes pour plus de groupes.
Chaque utilisateur est ensuite ajouté à un autre applications utilisateurs authentifiés liste.

Cette partie de l'application est en cours d'exécution avec succès. Cependant, nous sommes dans le besoin de chaque utilisateur à l'amiable du nom de domaine (c'est à dire la partie de son nom de DOMAINE/nom d'utilisateur)

Donc si il y a un utilisateur qui fait partie de l'ESSAI de domaine, du nom de Steve: TEST/steve est son login.
Je suis en mesure de trouver de steve dans l'AD, mais j'ai aussi besoin de "TEST" pour être stockée avec son ANNONCE de l'information.

Encore une fois, je peux trouver "steve" fine à l'aide d'un répertoire chercheur et le LDAP IP je me suis donné, mais vu le LDAP IP, comment puis-je trouver le sympathique nom de domaine?

Quand j'ai essayer le code suivant je me donne une erreur lorsque vous tentez d'accéder à la "defaultNamingContext':

Système.Moment de l'exécution.InteropServices.COMException (0x8007202A): Le mécanisme d'authentification est inconnue.

Voici le code:

    private string SetCurrentDomain(string server)
{
string result = string.Empty;
try
{
logger.Debug("'SetCurrentDomain'; Instantiating rootDSE LDAP");
DirectoryEntry ldapRoot = new DirectoryEntry(server + "/rootDSE", username, password);
logger.Debug("'SetCurrentDomain'; Successfully instantiated rootDSE LDAP");
logger.Debug("Attempting to retrieve 'defaultNamingContext'...");
string domain = (string)ldapRoot.Properties["defaultNamingContext"][0]; //THIS IS WHERE I HIT THE COMEXCEPTION
logger.Debug("Retrieved 'defaultNamingContext': " + domain);
if (!domain.IsEmpty())
{
logger.Debug("'SetCurrentDomain'; Instantiating partitions/configuration LDAP entry");
DirectoryEntry parts = new DirectoryEntry(server + "/CN=Partitions,CN=Configuration," + domain, username, password);
logger.Debug("'SetCurrentDomain'; Successfully instantiated partitions/configuration LDAP entry");
foreach (DirectoryEntry part in parts.Children)
{
if (part.Properties["nCName"] != null && (string)part.Properties["nCName"][0] != null)
{
logger.Debug("'SetCurrentDomain'; Found property nCName");
if ((string)part.Properties["nCName"][0] == domain)
{
logger.Debug("'SetCurrentDomain'; nCName matched defaultnamingcontext");
result = (string)part.Properties["NetBIOSName"][0];
logger.Debug("'SetCurrentDomain'; Found NetBIOSName (friendly domain name): " + result);
break;
}
}
}
}
logger.Debug("finished setting current domain...");
}
catch (Exception ex)
{
logger.Error("error attempting to set domain:" + ex.ToString());
}
return result;
}

modifier

J'ai ajouté cette méthode d'échantillonnage pour tenter une suggestion, mais je reçois une exception: "erreur non spécifiée" quand j'ai touché le "FindAll()" appel sur le chercheur.
La chaîne transmis est: "CN=TEST UTILISATEUR,CN=Users,DC=tempe,DC=ktregression,DC=com"

        private string GetUserDomain(string dn)
{
string domain = string.Empty;
string firstPart = dn.Substring(dn.IndexOf("DC="));
string secondPart = "CN=Partitions,CN=Configuration," + firstPart;
DirectoryEntry root = new DirectoryEntry(secondPart, textBox2.Text, textBox3.Text);
DirectorySearcher searcher = new DirectorySearcher(root);
searcher.SearchScope = SearchScope.Subtree;
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.Filter = "(&(nCName=" + firstPart + ")(nETBIOSName=*))";
try
{
SearchResultCollection rs = searcher.FindAll();
if (rs != null)
{
domain = GetProperty(rs[0], "nETBIOSName");
}
}
catch (Exception ex)
{
}
return domain;
  • Est le TEST domaine relevant de la même Forêt que le domaine actuel? Si oui, vous pouvez interroger le bon domaine pour cet utilisateur, l'utilisateur peut exister dans votre domaine, mais pas dans l'autre.
  • Oui, le TEST de domaine sera dans la même forêt que le domaine actuel. À cet égard, comment dois-je aller sur l'interrogation du domaine pour un utilisateur donné? Gardez à l'esprit mon ANNONCE connaissance est limitée, dans la mesure où je ne suis pas bien versé sur le renforcement de la les chaînes LDAP, et comme...
  • double possible de Get NT style de domaine\utilisateur donné DN - cette option fournit des informations sur la façon de convertir un utilisateur DN pour son nom de domaine NETBIOS, qui est ce que vous voulez ici.
  • Je voudrais ensuite d'interroger chaque domaine pour l'utilisateur de Steve et de retour d'un IList<string> des domaines où Steve a un compte. Par conséquent, on ne peut pas dire que dans l'absolu, le nom d'utilisateur sera TEST\Steve, depuis Steve pourrait avoir un autre compte d'utilisateur du même nom pour un domaine différent, disons PROD\Steve.
  • Steve Townsend, j'ai essayé ce lien comme une solution, mais je reçois une erreur non spécifiée lors de la prise de l'appel "FindOne()" sur le moteur de recherche.
InformationsquelleAutor ghost_mv | 2010-11-22