ASP.NET Impersonation

Ao usar a personificação, os aplicativos ASP.NET podem executar com a identidade do Windows (conta de usuário) do usuário que fez a solicitação.Personificação é normalmente usada em aplicativos que dependem do Microsoft Internet Information Services (IIS) para autenticar o usuário.

A personificação do ASP.NET é desativada por padrão.Se representação estiver ativada para um aplicativo ASP.NET, esse aplicativo será executado no contexto da identidade cujo token de acesso IIS passa para o ASP.NET.Esse token pode ser um token de usuário autenticado, sistema autônomo um token para um usuário do Windows conectado, ou o token que o IIS fornece para usuários anônimo (normalmente, a identidade IUSR_MACHINENAME).

Quando a personificação estiver ativada, somente o código do aplicativo é executado no contexto do usuário personificado.Os aplicativos são compilados e informações de configuração são carregadas usando a identidade do processo do ASP.NET.Para obter mais informações, consulte Configurando Identidade de Processo do ASP.NET.O aplicativo compilado é colocado na pasta de arquivos temporários do diretório do ASP.NET.A identidade do aplicativo que está sendo personificada precisa ter acesso de leitura/gravação neste diretório.A identidade de aplicativo personificada também requer pelo menos acesso de leitura aos arquivos no diretório do aplicativo e subdiretórios.Para obter mais informações, consulte ASP.NET Required Access Control Lists (ACLs).

ObservaçãoObservação:

Em razão de o ASP.NET usar a identidade do Windows no processo do ASP.NET durante a compilação dos aplicativos e a carga de informações de configuração, você deve manter privados o código do aplicativo e as informações de configuração entre os aplicativos de um servidor que hospeda vários aplicativos.No Windows Server 2003 você pode criar vários pools de aplicativos e especificar uma identidade única para cada pool de aplicativos.Você pode então restringir o acesso aos arquivos do aplicativo usando listas de controle de acesso (ACLs) (se o sistema de arquivos estiver formatado usando o NTFS) e essas identidades.Por exemplo, considere dois aplicativos, App1 e App2, onde as informações de cada aplicativo devem ser mantidas privadas.Você pode colocar App1 no pool de aplicativos ApplicationPool1 que tem uma identidade ID_ApplicationPool1.Você pode colocar App2 no pool de aplicativos ApplicationPool2 que tem uma identidade ID_ApplicationPool2.À conta ID_ApplicationPool1 foi dado acesso aos arquivos em App1, mas foi negado acesso aos arquivos em App2.À conta ID_ApplicationPool2 foi dado acesso aos arquivos em App2, mas foi negado acesso aos arquivos em App1.Observe que você não pode fazer essa separação no Windows 2000 ou no Windows XP Professional, porque nesses sistemas operacionais, a identidade do processo para todos os aplicativos ASP.NET é única.

Você controla a personificação usando o elemento de configuração identity.Como em outras diretivas de configuração, essa diretiva é aplicada hierarquicamente.Um arquivo de configuração mínimo para ativar a personificação de um aplicativo deve se assemelhar ao seguinte exemplo:

<configuration>
  <system.web>
    <identity impersonate="true"/>
  </system.web>
</configuration>

Você também pode adicionar suporte a nomes específicos para executar um aplicativo como uma identidade configurável, como mostra o exemplo a seguir:

<identity impersonate="true" 
  userName="contoso\Jane" 
  password="********" />

Substitua a senha correta pelo valor listado no exemplo anterior.

ObservaçãoObservação:

No exemplo anterior, o nome de usuário e a senha são armazenados em texto plano na arquivo de configuração.Para melhorar a segurança do seu aplicativo, é recomendável que você restrinja o acesso ao arquivo Web.config usando uma lista de controle de acesso (ACL) e que você criptografe o elemento de configuração Identidade em seu arquivo Web.config usando configuração protegida.Para obter mais informações, consulte Criptografando informações de configuração usando configuração protegida.

A configuração ilustrada no exemplo permite que o aplicativo todo seja executado usando a identidade contoso\Jane, independentemente da identidade da solicitação.Esse tipo de personificação pode ser delegado a outro computador.Isto é, se você especificar o nome de usuário e a senha para o usuário personificado, você pode se conectar a outro computador na rede e solicitar recursos, como arquivos ou acesso a SQL Server, usando segurança integrada.Se você ativar a personificação e não especificar uma conta de domínio como identidade, você não poderá se conectar a outro computador na rede, a menos que seu aplicativo do IIS esteja configurado para usar a autenticação básica.

ObservaçãoObservação:

No Windows 2000, você não pode personificar usando credenciais de usuário específicas para a identidade do processo operante do ASP.NET.Mas você pode abilitar a personificação sem credenciais de usuário específicas de forma que seu aplicativo personifique a identidade determinada pelo IIS.Para obter mais informações, consulte o artigo 810204, "PRB: Por solicitação de representação não funciona no Windows 2000 com o ASP.NET,"na Base de Dados de Conhecimento Microsoft da Microsoft em http://suporte.microsoft.com.

O exemplo de código a seguir mostra como ler programaticamente a identidade do usuário:

String username = 
    System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Mostrar: