[Résolu][ASP .NET][C#] Désactiver l'impersonation en code behind

Désactiver l'impersonation en code behind [Résolu][ASP .NET][C#] - C#/.NET managed - Programmation

Marsh Posté le 21-01-2008 à 14:37:43    

Hello les gens,
 
j'ai un plus ou moins un gros pépin. A l'heure actuel, j'utilise l'impersonation et notamment le changement de profil utilisateur lorsque je dois effectuer une tâche bien précise qui réclamerait des droits supplémentaires (écriture, modif, lecture).  
 
Dans ce cas, je n'ai aucun problème sauf une qui est que je dois déclarer dans les membres administrateur de la machine serveur le compte utilisateur qui aura plein pouvoir et d'utiliser son compte (login, nom de domaine et password) pour le changement de profil via l'impersonation. Le login, domaine et password sont pour l'instant définit dans le web.config.
 
Maintenant, et pour une raison de sécurité, j'aimerai cette fois désactiver programmatiquement l'impersonation au moment d'effectuer cette tâche précise sans pour autant mettre ma variable Identity impersonate="true" à false. Pour la raison simple que j'ai particulièrement besoin de connaitre les logins utilisateur pour la sécurité etc...
 
Bref, pour l'instant je n'ai trouvé aucune solution via MSDN ou autres. Dès qu'on parle d'impersonation c'est surtout pour faire exactement ce que j'ai fait plus haut.  
 
Donc si un de vous a une idée de comment désactiver cette impersonation. Si vraiment il n'est pas possible, je devrais faire avec ou de chercher une autre solution.


Message édité par MetalDestroyer le 22-01-2008 à 10:54:15
Reply

Marsh Posté le 21-01-2008 à 14:37:43   

Reply

Marsh Posté le 21-01-2008 à 17:12:55    

Hoplà je reviens sur le topic pour qu'on puisse m'éclairer sur cet article fort intéressant (en anglais).
 
Et plus précisément lorsque l'auteur mentionne ceci :

Citation :


Calling the Impersonate method of the current user’s WindowsIdentity makes the program run with the permissions of the current user.


 
Que veut il dire par "the permissions of the current user" ? Est ce les permissions de l'utilisateur définit au niveau de la machine serveur ? ou bien des permissions qui sont définit sur la machine cliente de l'utilisateur ?

Reply

Marsh Posté le 22-01-2008 à 10:39:51    

Hoplà bonne nouvelle j'ai trouvé la solution à mon problème.
Donc tout d'abord me suis complètement planté dans l'utilisation des méthodes natives qui me permettent de récupérer le login utilisateur windows.
 
Au lieu d'utiliser la variable httpContext.User.Identity.Name, j'ai pris ((WindowsPrincipal)System.Security.Principal.WindowsIdentity.GetCurrent()).Ident
ity.Name
. Qui au final me retourne le login de l'utilisateur si seulement le paramètre <identity impersonate=true/> est définit dans le web.config.
 
Dans le cas contraire, j'obtiens le login utilisateur définit dans le Pool définit sur IIS qui peuvent prendre les valeurs suivantes : systeme local, service local, service réseau ou encore un compte utilisateur.
 
Donc pour résoudre mon problème j'ai besoin de  
- désactiver l'impersonation au niveau de mon web.config.  
- paramétrer la sécurité du Pool IIS en systeme local (il a donc tous les droits).
- utiliser la variable HttpContext.User.Identity.Name au lieu du WindowsIdentity.GetCurrent() + cast (pour l'usage standard de l'appli)
- utiliser la variable ((WindowsPrincipal)System.Security.Principal.WindowsIdentity.GetCurrent()).Ident
ity.Name au moment d'effectuer l'impersonation
- utiliser le code qui permet d'effectuer l'impersonate au moment voulu (afin d'utiliser le profil systeme local) puis de revenir au profil initial.


Message édité par MetalDestroyer le 22-01-2008 à 10:53:37
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed