ASP.NET : L'impersonation
17/02/2011
L'impersonation signifie le fait de choisir sous quel compte seront exécutées les requêtes ASP.
Dans le web.config, la ligne suivante :
<identity impersonate="true" />
Signifie que le compte qui s'est connecté à IIS sera utilisé pour exécuter la logique côté serveur.
ATTENTION : Si le site est en accès anonyme, alors c'est le compte du pool d'application qui est utilisé (il en faut bien 1 !).
On peut forcer le compte utilisé pour l'impersonation :
<identity impersonate="true" userName="DOMAIN\username" password="aaa"/>
Ceci n'empêche pas le compte Windows de se connecter au site, mais ce sera DOMAIN\username
qui exécutera la logique.
Du côté des sources :
HttpContext.Current.User
: Renvoie le compte connecté à IIS (Windows intégré, anonyme, etc.) Quelque soit l'impersonation choisie.
WindowsIdentity.GetCurrent()
: Renvoie le compte qui exécute la logique. Donc si l'impersonation est à "true" dans le web.config, on aura le même compte que Current.User...
Enfin, en cours d'excution, on peut décider que le compte connecté sera celui qui sert à l'impersonation :
WindowsIdentity ident = (WindowsIdentity)HttpContext.Current.User.Identity;
// On caste avant...
ident.Impersonate();
Si jamais le Current.User
était un accès anonyme, une exception surgit : "Une identité anonyme ne peut pas exécuter un emprunt d'identité."
CQFD.