2010-09-08 23 views
1

A mon lieu de travail, je dois traiter avec 2 différents domaines x.com (le répertoire parent) et il est sous-domaine yxcomRecherche Active Directory à partir de C# défaut sur le serveur mais fonctionne localement

Le domaine parent (x.com) a tous les utilisateurs actifs de l'annuaire, les ordinateurs, etc. De mon poste de travail local qui se trouve dans le domaine x.com je peux très bien lire les courriels pour les utilisateurs de l'annuaire actif.

Le serveur se trouve dans le domaine y.x.com un sous-domaine de x. Sur le serveur, le répertoire actif lu échoue et l'adresse électronique n'est pas lue dans le répertoire actif. En plus de cela j'ai essayé le même code à partir d'une machine virtuelle qui se trouve dans le domaine y.x.com (même que le serveur) et à ma grande surprise cela a fonctionné.

J'utilise les services d'annuaire dans .NET pour ce faire et mon code est ci-dessous:

string userEmail = string.Empty; 

try 
{ 
accountName = accountName.Replace(ConfigurationManager.AppSettings["DomainName"].ToString(), ""); 

DirectorySearcher ds = new DirectorySearcher() 
{ 
    SearchRoot = new DirectoryEntry() 
    { 
    Path = ConfigurationManager.AppSettings["DirectoryPath"].ToString(), 
    AuthenticationType = AuthenticationTypes.Secure 
    } 
}; 

ds.Filter = "(SAMAccountName=" + accountName + ")"; 
ds.PropertiesToLoad.Add(ConfigurationManager.AppSettings["ADMailPropertyName"].ToString()); 

SearchResult result = ds.FindOne(); 

if (result != null) 
{ 
    userEmail = result.Properties[ConfigurationManager.AppSettings["ADMailPropertyName"].ToString()][0].ToString(); 
} 
} 
catch (Exception e) 
{ 
//Log error 
} 

return userEmail; 

Toute aide serait appréciée.

+1

Y at-il un message d'erreur? Si oui, veuillez l'ajouter à votre question (utilisez le lien 'edit'). – Greg

Répondre

2

Le compte d'utilisateur que votre programme exécute sur le serveur dispose-t-il des autorisations nécessaires pour Active Directory?

+0

Oui, nous utilisons l'usurpation d'identité et l'authentification Windows. Ainsi, l'utilisateur connecté est usurpé sur le serveur. Dans ce cas, c'était moi et j'ai pu vérifier cela parce que Page.User.Identity.Name sur le serveur a donné mon compte. –

1

Le commentaire sur la réponse de Greg indique que vous utilisez 1) l'emprunt d'identité et 2) l'authentification Windows. Cela signifie que votre serveur sait qui vous êtes et vous personnifie. Mais ... votre serveur ne peut pas déléguer ces informations d'identification au serveur distant (le serveur de domaine x.com). Il s'agit d'une violation potentielle de la sécurité qui, si c'était possible, permettait à un site de transférer vos informations d'identification à un tiers.

Une solution consiste à utiliser l'authentification kerberos et à autoriser la délégation de votre serveur. Je n'ai jamais fait cela moi-même, donc je ne peux vraiment pas vous aider avec les détails. Vous pouvez en lire plus au The Double-Hop Problem.