Empreint d'identité avec C#.NET
Il faut savoir que c'est la galére si vous voulez accéder à des fichiers ou ressources du poste local à partir d'une page aspx car par défaut tous les utilisateurs de la page sont représentés parl’utilisateur ASPNET (qui a des droits réduits).
Plusieurs solutions existent et la plus courante consiste à faire de l’ »empreint d’identité » à partir du fichier web.config ou à la volée.
La prémiére donne ceci:
Ajouter dans votre fichier web.config ceci:
<identity impersonate="true" userName="MonDomaine\MonLogin" password="MonMotDePasse" />
La seconde donne ceci:
1. Déclarez la methode extern de l'api "advapi32" comme ceci:
[System.Runtime.InteropServices.DllImport("advapi32.dll")]
public static extern bool LogonUser(
String strUsername,
String strDomain,
String strPassword,
int intLogonType,
int intLogonProvider,
out IntPtr phToken);
2. puis ...
System.IntPtr phToken = IntPtr.Zero;
LogonUser("votre login", "votre domaine(nom de la machine sur le réseau)", "votre mot de passe", 3, 0, out phToken);
WindowsIdentity ImpersonatedIdentity = new WindowsIdentity(phToken);
WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate();
//traitements .....
//Fin empreint d'identité
MyImpersonation.Undo();
ou bien, si vous voulez empreinter l'identité de l'utilisateur connecté, alors ceci conviendra le mieux:
WindowsIdentity ImpersonatedIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate();
//traitements .....
//Fin empreint d'identité
MyImpersonation.Undo();
Plusieurs solutions existent et la plus courante consiste à faire de l’ »empreint d’identité » à partir du fichier web.config ou à la volée.
La prémiére donne ceci:
Ajouter dans votre fichier web.config ceci:
<identity impersonate="true" userName="MonDomaine\MonLogin" password="MonMotDePasse" />
La seconde donne ceci:
1. Déclarez la methode extern de l'api "advapi32" comme ceci:
[System.Runtime.InteropServices.DllImport("advapi32.dll")]
public static extern bool LogonUser(
String strUsername,
String strDomain,
String strPassword,
int intLogonType,
int intLogonProvider,
out IntPtr phToken);
2. puis ...
System.IntPtr phToken = IntPtr.Zero;
LogonUser("votre login", "votre domaine(nom de la machine sur le réseau)", "votre mot de passe", 3, 0, out phToken);
WindowsIdentity ImpersonatedIdentity = new WindowsIdentity(phToken);
WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate();
//traitements .....
//Fin empreint d'identité
MyImpersonation.Undo();
ou bien, si vous voulez empreinter l'identité de l'utilisateur connecté, alors ceci conviendra le mieux:
WindowsIdentity ImpersonatedIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate();
//traitements .....
//Fin empreint d'identité
MyImpersonation.Undo();
Par dotnet, Vendredi 2 Decembre 2005 à 14:22 GMT+2 dans .NET (article, RSS)





