ASP.NET : L'impersonation

Mécanique de l’impersonation en ASP : pratique, mais pas simple…
L’impersonation signifie le fait de choisir sous quel compte seront exécutés les processus 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="DOMAINusername" password="aaa"/>
Ceci n’empêche pas le compte Windows de se connecter au site, mais ce sera DOMAINusername 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.