Comprendre une imitation .NET
.NET L'identité permet l'exécution du code sous un compte d'utilisateur désigné, fréquemment couplé à un accès de compte basé sur les informations d'identification. Le Framework .NET fournit les API nécessaires à la fois pour l'identité et la gestion des comptes d'utilisateurs.
Techniques d'identification
L'espace de noms System.Security.Principal
propose plusieurs façons d'obtenir une usurpation d'identité:
WindowsIdentity.RunImpersonated
: Exécute du code à l'aide d'un jeton utilisateur spécifié, en acceptant un Action
ou Func<T>
déléguer pour le bloc de code. WindowsIdentity.Impersonate
: génère un objet WindowsImpersonationContext
, permettant une usurpation d'identité dans un bloc using
pour la gestion structurée des ressources. Accès aux comptes d'utilisateurs avec des informations d'identification
L'accès à un compte utilisateur à l'aide des informations d'identification fournies implique généralement l'API Win32 native LogonUser
:
<code class="language-csharp">[DllImport("advapi32.dll")] internal static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);</code>
bien que fonctionnel, LogonUser
peut être complexe. Une alternative plus simple est la bibliothèque SimpleImpersonation
:
<code class="language-csharp">using SimpleImpersonation; var credentials = new UserCredentials(domain, username, password); using (SafeAccessTokenHandle userHandle = credentials.LogonUser(LogonType.Interactive)) { // Your impersonated code here }</code>
Limitations: Impère d'identité à distance
L'identité est intrinsèquement locale; Il ne s'étend pas aux ordinateurs distants à moins qu'ils ne partagent le même domaine ou ne possèdent pas une relation de confiance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!