Comment puis-je résoudre le problème du double-hop de Kerberos?
j'ai de la difficulté à appeler un service web à partir d'une application web et j'espérais que quelqu'un ici pourrait être en mesure d'aider. À partir de ce que je peux dire, c' semble pour avoir quelque chose à voir avec le Kerberos double-saut problème. Cependant, si c'est le cas, je ne suis pas sûr de savoir quoi faire pour résoudre le problème. Pour rendre les choses plus difficiles, je n'ai pas les bonnes permissions pour apporter des modifications aux comptes Active Directory, donc j'ai besoin de savoir quoi demander quand demander changement. Dans ma situation, je dois passer les justificatifs D'identité (authentification intégrée de Windows) d'une application web à un service web d'arrière-plan pour que le service web s'exécute dans le contexte de l'utilisateur approprié.
<!-Voici mon numéro exact:Cela fonctionne
Cela ne fonctionne pas
différence entre le scénario de travail et le scénario de non-fonctionnement est que le scénario de fonctionnement exécute l'application sur localhost (que ce soit sur le PC d'un développeur ou sur le serveur en question) et que l'exemple de non-fonctionnement tourne sur une autre machine. Le code entre les deux scénarios est exactement le même.
Ce que j'ai essayé
- Ajouter un SPN au compte de domaine qui exécute le pool d'applications pour chaque serveur
setspn -a http/server1 DOMAINaccount
- différentes méthodes de l'emprunt d'identité
- suppression du code d'imitation
using(...)
et l'exécution de l'appel de service web comme le compte de pool d'applications. Cela fonctionne comme prévu.
2 réponses
il faut faire confiance au serveur intermédiaire pour la délégation. Dans le cas contraire, aucun justificatif d'identité ne sera délégué et le serveur intermédiaire ne pourra pas se faire passer pour le client d'origine.
plus souvent qu'autrement la raison est que le serveur 1 ne passe pas un token 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'imitation pour l'appel WCF
ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation