web-dev-qa-db-fra.com

Comment puis-je résoudre le problème de double-saut Kerberos?

J'ai du mal à appeler un service Web à partir d'une application Web et j'espérais que quelqu'un ici pourrait aider. D'après ce que je peux dire, cela semble pour avoir quelque chose à voir avec le Kerberos problème de double saut . Cependant, si c'est le cas, je ne sais pas quoi faire pour réellement résoudre le problème. Pour compliquer les choses, je n'ai pas les autorisations appropriées pour apporter des modifications aux comptes Active Directory, j'ai donc besoin de savoir quoi demander lors de la demande de modifications. Dans ma situation, je dois transmettre les informations d'identification (authentification Windows intégrée) d'une application Web à un service Web principal afin que le service Web s'exécute dans le contexte utilisateur approprié.

Voici mon problème exact:

Cela fonctionne

Working scenario

Cela ne fonctionne pas

Non-working scenario

La différence seulement entre le scénario de travail et le scénario de non-fonctionnement est que le scénario de travail exécute l'application sur l'hôte local (que ce soit le PC d'un développeur ou sur le serveur en question) et le non-fonctionnement l'exemple fonctionne sur une autre machine. Le code entre les deux scénarios est exactement le même.

Ce que j'ai essayé

  1. Ajout d'un SPN au compte de domaine qui exécute le pool d'applications pour chaque serveur setspn -a http/server1 DOMAIN\account
  2. Différentes méthodes d'emprunt d'identité
  3. Suppression du code d'emprunt d'identité using(...) et exécution de l'appel de service Web en tant que compte de pool d'applications. Cela fonctionne comme prévu.

Quelqu'un at-il une idée de ce que je pourrais faire pour résoudre ce problème?

31
Steve Platz

Le serveur intermédiaire doit être approuvé pour la délégation. Sinon, aucune information d'identification ne sera déléguée et le serveur intermédiaire ne peut pas emprunter l'identité du client d'origine.

14
Michael-O

Le plus souvent, la raison en est que le serveur 1 ne transmet pas de jeton de délégation au serveur 2. Ainsi, lorsque le serveur 2 essaie d'utiliser ce ticket d'authentification pour aller ailleurs (probablement un serveur SQL), il échoue.

Vous devez définir le niveau d'emprunt d'identité pour l'appel WCF

ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation

http://msdn.Microsoft.com/en-us/library/system.servicemodel.security.windowsclientcredential.allowedimpersonationlevel.aspx

3
Knaģis