Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

IMPERSONATION : EXECUTER UN BOUT DE CODE AVEC LES DROITS D'UN AUTRE UTILISATEUR


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous : impersonation, utilisateur, logon, executer, code Niveau : Initié Date de création : 31/05/2006 Date de mise à jour : 05/06/2006 20:41:27 Vu : 15 664

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


Description

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

  • [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();
  • }
  • }
[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;"
 

Historique

05 juin 2006 20:41:27 :
J'avais oublier le P/Invoke de LogonUser;

Commentaires et avis

signaler à un administrateur
Commentaire de scortex84 le 27/07/2006 10:30:20

Salut, et bravo pour ton code.

Par contre, il me semble qu'il est nécessaire que l'utilisateur soit administrateur du serveur pour que cela fonctionne. Ou est-il possible de lui attribuer un autre groupe ?

Merci,

Seb.

signaler à un administrateur
Commentaire de poppyto le 27/07/2006 11:05:40 administrateur CS

Je ne vois pas pourquoi il faudrait être Admin ? Le but de l'opération est justement de pouvoir obtenir d'autres droits dont ceux d'Admin pourquoi pas ?

signaler à un administrateur
Commentaire de scortex84 le 27/07/2006 17:20:32

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.

signaler à un administrateur
Commentaire de prac le 23/04/2007 10:41:44

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 <img src=""> ç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.

signaler à un administrateur
Commentaire de poppyto le 23/04/2007 11:24:05 administrateur CS

Est-ce que le filtre isapi d'asp.net 2.0 est aussi utilisé pour les images dans IIS ?

signaler à un administrateur
Commentaire de prac le 23/04/2007 15:36:12

Je ne crois pas, mais je code en asp (pas en dotnet), donc je crois que je ne suis pas concerné.?non?

signaler à un administrateur
Commentaire de poppyto le 23/04/2007 17:46:08 administrateur CS

Désolé, c'est pas mon dada l'asp ^^

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

code utilisateur xp [ par batou ] comment connaitre le code secret d'un utilisateursous xp? Script de logon pour partager un dossier [ par Nymouas ] Bonjour, Je voudrais faire un script qui permet de partager le dossier de l'utilisateur en train de se logger (qui s'ex&#233;cute une fois lors de l Executer du code après l'affichage [ par Seren ] Bonjour les gens! Je chercher a savoir comment je peux executer du code après avoir envoyer le HTML au client. Je m'explique.Pour afficher plus rapide HttpModule et session [ par Oho2 ] Bonjour,Je suis en train de concevoir une appli intranet qui necéssite une authentification et l'utilisation de session. Une fois l'utilisateur connec impersonation [ par pwalinett ] bonjour, j'ai un problème, j'utilise l'impersonation pour imprimer une page, seulement je voudrais que seul un utilisateur puisse avori accès a cette authentification [ par koukitasaid ] Bonjour, J'ai un formulaire de saisie que l'utilisateur doit remplir ,ces informations seront Ajouter sur les tables selon les champs de chacune, apre code de variable [ par metos ] Le problème c'est qu'avec cette manière un utilisateur peut voir le mot de passe en affichant la source. Est-il possible de coder le password ou d'emp Empecher une procedure de s'executer plusieurs fois [ par blooh ] Bonjour, Voila j'ai un probleme qui me parait simple... mais je reste bloqu&#233; car je ne comprends pas bien ce qu'il se passe: J'ai un formulaire a Impersonation - advapi32.dll [ par scortex84 ] Bonjour, j'utilise "l'impersonation", l'emprun d'identité, afin de copier des fichiers dans un répertoire partagé sur mon réseau et qui n'autorise qu' Je deviens fou.... [ par Hobby ] Bonjour,Je fait une page avec un form pour le login/pass qui vérifie dans une DB, si l'utilisateur existe, je creer un cokies et active des variables


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.