2010-08-17 4 views
3

Utilisation du code PrincipalContext qui se trouve derrière un service WCF. Le service WCF emprunte l'identité pour permettre une authentification de type "pass-through".System.DirectoryServices.AccountManagement.PrincipalContext et Usurpation d'identité dans un service WCF

Alors que tout ce que je fais avec Active Directory (principalement l'espace de noms System.DirectoryServices.Protocols) fonctionne correctement dans ce scénario, pour une raison quelconque, les classes de System.DirectoryServices.AccountManagement lancent un ajustement. Exemple de code qui échoue:

PrincipalContext context = new PrincipalContext(ContextType.Domain, domainName); 
UserPrincipal user = 
    UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, UserName); 

Quand je fais l'appel à FindByIdentity, je reçois un COMException: « Une erreur d'opération a eu lieu ». Les appels à la PrincipalContext échouent également, par exemple .:

string server = context.ConnectedServer; 

Les deux OperationContext.Current.ServiceSecurityContext et Thread.CurrentPrincipal.Identity montrent l'usurpation d'identité fonctionne correctement. Et, comme je le dis, d'autres tâches AD dans S.DS.P fonctionnent bien.

Si je définis explicitement les informations d'identification sur le PrincipalContext, tout fonctionne. Par exemple:

PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, domainName, user, password); 
UserPrincipal user = 
    UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, UserName); 

Maintenant, tout fonctionne. Mais je ne connaîtrai pas le nom d'utilisateur et le mot de passe de l'appelant; Je dois compter sur l'usurpation d'identité.

Des idées sur ce qui causerait le problème que je vois?

Merci d'avance! James

Répondre

1

Assurez-vous qu'un spn est défini pour le pool d'applications, que la délégation est définie dans AD et que le compte du pool d'applications a le rôle de faire partie du privilège os.

+0

Je ne suis pas sûr de ce que vous voulez dire par un spn pour la piscine de l'application; J'utilise un pool d'applications dédié à ce service, mais je ne sais pas exactement ce qu'est un spn. Qu'est-ce que vous devez définir dans AD pour la délégation? Je vais vérifier le dernier –

+0

spn = Nom du service principal – ecounysis

Questions connexes