L'emprunt d'identité dans ASP.NET l'application web ne fonctionne pas lors de l'exécution sur IIS
Je suis en train de travailler sur ASP.NET 4.0 MVC3 application web qui fonctionne en environnement intranet. L'application permet l'utilisation de l'authentification Windows. Son pool d'applications est exécuté par un utilisateur de domaine qui a spn ensemble sur un contrôleur de domaine. L'authentification fonctionne à l'aide de Kerberos (sur IE et Firefox après une configuration supplémentaire).
Maintenant, je veux télécharger des fichiers de sharepoint, mais il est important pour moi de télécharger le fichier que l'utilisateur actuellement connecté à l'application (le fichier est créé sur Sharepoint avec son/ses informations d'identification).
J'ai le code suivant dans ResourceExists(Uri uri)
fonction:
'...
Dim identity As System.Security.Principal.WindowsIdentity = HttpContext.User.Identity
Dim impersonationContext = identity.Impersonate()
response = request.GetResponse()
impersonationContext.Undo()
'...
Cela fonctionne lors de l'exécution en local, mais quand je le déployer sur le serveur-je obtenir de l'exception:
System.Net.WebException: The remote server returned an error: (401) Unauthorized.\r\n at WebDav.WebDavClient.ResourceExists(Uri uri)\r\n at Website.Website.WebdavController.Upload(HttpPostedFileBase file, UploadViewModel vm)
J'ai lu quelque chose au sujet de transmettre les informations d'identification, qui n'est pas possible avec NTLM, mais je suis sûr que je suis à l'aide de Kerberos (j'ai vérifié les en-têtes avec wireshark et violoniste) et je vois le suivant:
Authorization: Negotiate YIIFpQYGKwYBBQUCoIIFmTCCBZWgJDAiBgkqhkiC9x...
Des idées pourquoi l'usurpation d'identité ne fonctionne pas lors de l'exécution sur le serveur IIS?
OriginalL'auteur Michal B. | 2012-06-18
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse ici:
http://support.microsoft.com/kb/810572
"Kerberos ne fonctionne pas dans une architecture à charge équilibrée et IIS revient à l'authentification NTLM. Parce que vous ne pouvez pas utiliser l'authentification NTLM pour la délégation, les applications ou services qui nécessitent de la délégation ne fonctionnent pas. Pour plus d'informations, cliquez sur le numéro d'article suivant pour afficher l'article correspondant dans Microsoft"
Et c'était exactement le cas. J'ai essayé avec une autre machine qui n'est pas équilibré et qu'il fonctionne.
La seule chose qui toujours me surprend, c'est que ImpersonationLevel de l'identité est encore
Impersonate
pasDelegate
...OriginalL'auteur Michal B.
Après la mise
<identity impersonate="true"/>
dans votre site web.config essayez ce qui suit:<identity impersonate="true"/>
mon application s'exécute en tant que cet utilisateur tous les temps. Je ne peux pas permettre que. L'application web a besoin pour s'exécuter comme un compte de domaine personnalisé et est déjà configuré pour cela. Que pour une seule ligne de code que j'ai besoin d'accéder à la ressource réseau que l'utilisateur actuellement connecté et non pas comme c'est la coutume de compte de domaine qui exécute l'application. Suis-je ici ou ai-je raté quelque chose? Je suis actuellement à la recherche à la transition de protocole (msdn.microsoft.com/en-us/library/ms998355.aspx) je pense que cela s'applique dans mon cas. Pouvez-vous confirmer?Je dois utiliser usurper l'identité d'="true" sinon je vous ImpersonationLevel
Identify
. Alors je l'utilise avec un nom d'utilisateur et le mot de passe de DOMAINE\UTILISATEUR que je veux lancer l'application.OriginalL'auteur Darin Dimitrov
vous avez besoin pour configurer votre site correctement dans IIS pour usurpation d'identité au travail.
voir Configurer ASP.NET usurpation de l'identité d'Authentification (IIS 7)
Je upvoted les deux réponses, parce qu'ils comprennent une partie de la configuration qui devait être fait. Dans mon cas, le problème était un équilibreur de charge...
OriginalL'auteur marc.d