Partilhar via


Personificação e reversão

Nota

Este artigo aplica-se ao Windows.

Para obter informações sobre o ASP.NET Core, consulte ASP.NET Core Security.

Às vezes, talvez seja necessário obter um token de conta do Windows para representar uma conta do Windows. Por exemplo, seu aplicativo ASP. O aplicativo baseado em NET pode ter que agir em nome de vários usuários em momentos diferentes. Seu aplicativo pode aceitar um token que representa um administrador do IIS (Serviços de Informações da Internet), representar esse usuário, executar uma operação e reverter para a identidade anterior. Em seguida, ele pode aceitar um token do IIS que representa um usuário com menos direitos, executar alguma operação e reverter novamente.

Em situações em que seu aplicativo deve representar uma conta do Windows que não foi anexada ao thread atual pelo IIS, você deve recuperar o token dessa conta e usá-lo para ativar a conta. Você pode fazer isso executando as seguintes tarefas:

  1. Recupere um token de conta para um usuário específico fazendo uma chamada para o método LogonUser não gerenciado. Esse método não está na biblioteca de classes base do .NET, mas está localizado no advapi32.dll não gerenciado. Acessar métodos em código não gerenciado é uma operação avançada e está além do escopo desta discussão. Para obter mais informações, consulte Interoperando com código não gerenciado. Para obter mais informações sobre o método LogonUser e advapi32.dll, consulte a documentação do Platform SDK.

  2. Crie uma nova instância da classe WindowsIdentity , passando o token. O código a seguir demonstra essa chamada, onde hToken representa um token do Windows.

    WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);  
    
    Dim impersonatedIdentity As New WindowsIdentity(hToken)  
    
  3. Comece a WindowsImpersonationContext representação criando uma nova instância da classe e inicializando-a com o WindowsIdentity.Impersonate método da classe inicializada, conforme mostrado no código a seguir.

    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();  
    
    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()  
    
  4. Quando você não precisar mais representar, chame o WindowsImpersonationContext.Undo método para reverter a representação, conforme mostrado no código a seguir.

    myImpersonation.Undo();  
    
    myImpersonation.Undo()  
    

Se o código confiável já tiver anexado um WindowsPrincipal objeto ao thread, você poderá chamar o método de instância Impersonate, que não usa um token de conta. Observe que isso só é útil quando o objeto WindowsPrincipal no thread representa um usuário diferente daquele sob o qual o processo está sendo executado no momento. Por exemplo, você pode encontrar essa situação usando ASP.NET com a autenticação do Windows ativada e a representação desativada. Nesse caso, o processo está sendo executado em uma conta configurada no IIS (Serviços de Informações da Internet) enquanto a entidade de segurança atual representa o usuário do Windows que está acessando a página.

Observe que nem Impersonate nem Undo altera o objeto Principal (IPrincipal) associado ao contexto de chamada atual. Em vez disso, a representação e a reversão alteram o token associado ao processo atual do sistema operacional.

Consulte também