Condividi tramite


Rappresentazione e ripristino

Talvolta può essere necessario ottenere un token di account di Windows NT per impersonare un account Windows. È ad esempio possibile che sia necessario che l'applicazione basata su ASP.NET operi per conto di vari utenti in momenti diversi. L'applicazione potrebbe accettare un token che rappresenta un amministratore da Internet Information Services (IIS), impersonare tale utente, eseguire un'operazione e ritornare all'identità precedente. In seguito, potrebbe accettare da IIS un token che rappresenta un utente con minori diritti, eseguire alcune operazioni e tornare nuovamente all'identità precedente.

In situazioni in cui è necessario che l'applicazione rappresenti un account Windows che non è stato associato da IIS al thread corrente, sarà necessario recuperare il token di tale account e utilizzarlo per attivare l'account stesso. A questo scopo attenersi alla seguente procedura:

  1. Recuperare un token di account per un utente specifico mediante l'esecuzione di una chiamata al metodo non gestito LogonUser. Questo metodo non è contenuto nella libreria delle classi di base di .NET Framework, ma si trova nella libreria advapi32.dll non gestita. L'accesso ai metodi in codice non gestito è un'operazione avanzata ed esula dall'ambito della presente discussione. Per ulteriori informazioni, vedere Interoperabilità con codice non gestito. Per ulteriori informazioni sul metodo LogonUser e sulla libreria advapi32.dll, vedere la documentazione relativa a Platform SDK (informazioni in lingua inglese).

  2. Creare una nuova istanza della classe WindowsIdentity, passando il token. Nel codice riportato di seguito è illustrata questa chiamata, dove hToken rappresenta un token Windows.

    WindowsIdentity ImpersonatedIdentity = new WindowsIdentity(hToken);
    
    Dim ImpersonatedIdentity As New WindowsIdentity(hToken)
    
  3. Iniziare la rappresentazione creando una nuova istanza della classe WindowsImpersonationContext e inizializzandola con il metodo WindowsIdentity.Impersonate della classe inizializzata, come illustrato nel codice seguente.

    WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate();
    
    WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate()
    
  4. Quando la rappresentazione non è più necessaria, chiamare il metodo WindowsImpersonationContext.Undo per annullarla, come illustrato nel codice seguente.

    MyImpersonation.Undo();
    
    MyImpersonation.Undo()
    

Se il codice attendibile ha già associato un oggetto WindowsPrincipal al thread, sarà possibile chiamare il metodo di istanza Impersonate che non richiede alcun token di account. Si noti che questo è utile solo quando l'oggetto WindowsPrincipal sul thread rappresenta un utente diverso da quello in base al quale il processo è in esecuzione. Si verifica una situazione del genere, ad esempio, quando si utilizza ASP.NET con l'autenticazione di Windows attivata e la rappresentazione disattivata. In questo caso, il processo viene eseguito in base a un account configurato in Internet Information Services (IIS) mentre il principale corrente rappresenta l'utente Windows che accede alla pagina.

Si noti che né ImpersonateUndo modificano l'oggetto Principal associato al contesto di chiamata corrente. La rappresentazione e il ripristino modificano invece il token associato al processo del sistema operativo.

Vedere anche

Riferimenti

WindowsIdentity

WindowsImpersonationContext

Concetti

Oggetti Principal e Identity

Rappresentazione ASP.NET

Utilizzo dell'autenticazione IIS con la rappresentazione ASP.NET

Altre risorse

Interoperabilità con codice non gestito