2017-06-22 3 views
0

En essayant de faire fonctionner une API sur le serveur A, pas sur un domaine, appelez une autre API B qui se trouve sur un domaine. Je fais l'appel en utilisant l'impersion. L'API sur B est sous Windows auth.Effectuer un appel sur une API Web en utilisant l'emprunt d'identité

Pour tester l'emprunt d'identité, j'ai construit un petit utilitaire Windows à partir de A (pas sur le domaine), et cela fonctionne. L'usurpation d'identité utilise logontype 9 https://msdn.microsoft.com/en-us/library/windows/desktop/aa378184%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

Cependant, quand je lance le même code mais dans un api web hébergé sur iis sur A, rien ne semble venir par B.

Le api en cours d'exécution dans le serveur IIS A , s'exécute sous un pool d'applications à l'aide de l'identité du pool d'applications. Cependant, le code qui fait une demande à api sur B utilise l'emprunt d'identité.

L'identité du pool d'applications sur A peut-elle interférer avec l'appel de B?

+0

[mcve] pourrait vous donner une réponse, ou au moins afficher du code. –

+0

Pourquoi ne l'essayez-vous pas? Modifiez l'identité du pool d'applications pour qu'elle soit celle que vous avez utilisée pour tester le processus et voir si cela fonctionne. Dans l'ancien temps, vous deviez vous remettre à l'état initial pour accéder au jeton de processus de base avant d'emprunter l'identité, mais je ne pense pas que cela fonctionne et plus encore. – Mike

Répondre

0

Votre problème semble être lié à la configuration appropriée des SPN et de la délégation contrainte Kerbros.

https://blogs.msdn.microsoft.com/wushuai/2017/01/13/constrained-kerberos-delegation-with-asp-net/

applications en cours d'exécution dans le contexte du serveur IIS ne sont pas autorisés à bon gré mal gré d'accéder aux ressources du réseau d'entreprise. Le service HTTP s'exécutant sur le serveur A doit être configuré de manière à pouvoir emprunter l'identité et accéder aux ressources du serveur B.

Lorsque vous indiquez que le serveur A n'est pas sur le domaine, je suppose que le serveur A est sur un serveur. domaine Windows différent. Afin de permettre le passage des appels entre domaines, vous devez avoir une relation d'approbation entre les domaines.

Le domaine offrant l'accès à une ressource doit "faire confiance" au domaine consommant la ressource.