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 005 fois - Téléchargée 27 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

Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

Désolé, c'est pas mon dada l'asp ^^
Messages postés
6
Date d'inscription
vendredi 30 mars 2007
Statut
Membre
Dernière intervention
24 avril 2007

Je ne crois pas, mais je code en asp (pas en dotnet), donc je crois que je ne suis pas concerné.?non?
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

Est-ce que le filtre isapi d'asp.net 2.0 est aussi utilisé pour les images dans IIS ?
Messages postés
6
Date d'inscription
vendredi 30 mars 2007
Statut
Membre
Dernière intervention
24 avril 2007

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.
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1
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.