Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Este artigo se aplica ao Windows.
Para obter informações sobre 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 baseado em ASP.NET pode precisar agir em nome de vários usuários em diferentes momentos. Seu aplicativo pode aceitar um token que representa um administrador dos Serviços de Informações da Internet (IIS), 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:
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.dllnão gerenciado. Acessar métodos em código não gerenciado é uma operação avançada e está além do escopo dessa discussão. Para mais informações, confira Interoperar com código não gerenciado. Para obter mais informações sobre o método LogonUser e advapi32.dll, consulte a documentação do SDK da Plataforma.
Crie uma nova instância da classe WindowsIdentity , passando o token. O código a seguir demonstra essa chamada, onde
hTokenrepresenta um token do Windows.WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);Dim impersonatedIdentity As New WindowsIdentity(hToken)Inicie a impersonação criando uma nova instância da classe WindowsImpersonationContext e inicializando-a com o método WindowsIdentity.Impersonate da classe inicializada, conforme mostrado no código a seguir.
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()Quando você não precisar mais representar, chame o método WindowsImpersonationContext.Undo 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 em que o processo está sendo executado no momento. Por exemplo, você pode encontrar essa situação ao usar o ASP.NET com autenticação do Windows ativada e suplantação de identidade desativada. Nesse caso, o processo está em execução em uma conta configurada nos 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.