Impersonation : executer un bout de code avec les droits d'un autre utilisateur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 367 fois - Téléchargée 29 fois

Contenu du snippet

Mise en pratique :
J'ai un gros problème, je voudrais par l'intermédiaire d'une page web créer une tâche planifiée. J'aimerai bine que le compte ASP.net ait les droit d'accès au répertoire C:\WINDOWS\Tasks\ mais apparemment ça ne semble pas jouable pour ce répertoire.

La solution ? Utiliser l'impersonation d'asp.net, c'est à dire qu'une portion de code va être executée sous une autre identité.
Pour cela il va par contre falloir passer par une API mais rien de grâve dans l'ensemble !

Note : Bien entendu, il vous faudra le LOGIN + MOT DE PASSE + DOMAINE de l'utilisateur sus-nommé ^^

Source / Exemple :


[DllImport("advapi32.dll", SetLastError=true)]
public extern static bool LogonUser(String lpszUsername, String
lpszDomain,
String lpszPassword, int dwLogonType,
int dwLogonProvider, ref IntPtr phToken);

public void Impersonate()
{

	const int LOGON32_LOGON_INTERACTIVE = 2;
	const int LOGON32_LOGON_NETWORK = 3;
	
	const int LOGON32_PROVIDER_DEFAULT = 0;
	const int LOGON32_PROVIDER_WINNT35 = 1;
	const int LOGON32_PROVIDER_WINNT40 = 2;	
	const int LOGON32_PROVIDER_WINNT50 = 3;
	

	  IntPtr UserToken = new IntPtr(0);
	  bool loggedOn;

	  try
	  {
	  	//tente de logger l'utilisateur
		loggedOn = LogonUser(
		     "LOGIN",
		     "DOMAINE",//Dns.GetHostName(),
		      MOT DE PASSE",
		      LOGON32_LOGON_NETWORK,
		      LOGON32_PROVIDER_DEFAULT, 
		      ref UserToken);
	  }
	  catch(Exception ex)
	  {
		throw ex;
	  }

	  if(loggedOn) //logging ok ?
	  {
	  	//renvoi identité ASP_NET
		WindowsIdentity ident_here1 = WindowsIdentity.GetCurrent();
		
		
		WindowsIdentity SystemMonitorUser = new WindowsIdentity(UserToken);
		
		//Changement d'utilisateur ici
		WindowsImpersonationContext ImpersonatedUser =SystemMonitorUser.Impersonate();

		//ridentité nouvel User
		WindowsIdentity ident_here2 = WindowsIdentity.GetCurrent();

		/************************************************
		*
		*

  • EXECUTER LE CODE ICI
* *
                                                                                                • /
ImpersonatedUser.Undo(); } }

Conclusion :


N'oubliez pas le "using System.Runtime.InteropServices;"

A voir également

Ajouter un commentaire Commentaires
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
23 avril 2007 à 17:46
Désolé, c'est pas mon dada l'asp ^^
prac Messages postés 6 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 24 avril 2007
23 avril 2007 à 15:36
Je ne crois pas, mais je code en asp (pas en dotnet), donc je crois que je ne suis pas concerné.?non?
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
23 avril 2007 à 11:24
Est-ce que le filtre isapi d'asp.net 2.0 est aussi utilisé pour les images dans IIS ?
prac Messages postés 6 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 24 avril 2007
23 avril 2007 à 10:41
Bonjour,

j'ai mis en place l'impersonation en asp, tout marche corectement pour le téléchargement de fichiers(images ou autre), mais lorsque je veux afficher une image directement sur la page web avec un simple ça ne fonctionne plus et il me demande de m'identifier et donc n'affiche pas l'image.
Sachant que lorsque je change les autorisation sur le fichier ça fonctionne et donc pas l'impersonation.

Si quelqu'un à une idée merçi de m'en faire part.

Cordialement.
scortex84 Messages postés 379 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 20 avril 2011 1
27 juil. 2006 à 17:20
en fait, j'ai posté mon problème ici :
http://www.aspfr.com/infomsg_IMPERSONATION-ADVAPI32-DLL_786503.aspx

Si tu as une idée...
seb.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.