3 votes

asp.net Impersonate User pour l'accès aux ressources du réseau

Code :

System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext =
    ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

//access network resources.

impersonationContext.Undo();

web.config :

<authentication mode="Windows">       
</authentication>
<identity impersonate="true"
userName="user"
password="password"></identity>

Comme le montre clairement le fichier web.config, l'application fonctionne en mode impersonnel. J'ai besoin de me faire passer temporairement pour accéder à une ressource du réseau. Je fais cela comme indiqué ci-dessus.

Cela fonctionne bien sur le serveur si je navigue vers le site web sur l'IE local installé sur le serveur mais lorsque j'accède à l'application depuis mon PC ou tout autre PC, j'obtiens un accès refusé.

En fait, tout ceci se passe dans un environnement de domaine d'entreprise. Ainsi, dans les deux cas, IE transmet un jeton authentifié valide.

Une idée de ce qui se passe ? Merci.

3voto

HAL9000 Points 653

Vous devez vous assurer que le serveur déléguera les contextes de sécurité impersonnalisés de votre application à un autre serveur (la ressource réseau que vous avez mentionnée).

Je suis presque sûr que cela fonctionne lorsque vous êtes connecté à votre serveur parce qu'il utilise le contexte de sécurité de votre connexion directe, et non le contexte impersonnalisé qui existe dans l'application.

Je ne me souviens pas des détails de la configuration, mais je sais que l'on parle de délégation ou de "Kerberos Double Hop". On parle de "délégation restreinte" lorsque vous configurez votre système de manière à ce qu'un seul type de délégation soit autorisé. Par exemple, votre application n'est autorisée à déléguer les contextes de sécurité que lorsqu'elle communique avec Active Directory (port xyz) sur cet autre serveur spécifique - sinon, elle ne peut pas le faire.

Voir Comprendre le double saut Kerberos

Voir DelegConfig - il est utile pour configurer la délégation.

Voir aussi Article de TechNet

Et.. : cet autre article

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X