Request.ServerVariables("LOGON_USER") retorna uma cadeia de caracteres vazia no ASP.NET

Este artigo fornece resoluções para o problema em que a Request.ServerVariables("LOGON_USER") variável retorna cadeia de caracteres vazia em ASP.NET.

Versão original do produto: ASP.NET
Número de KB original: 306359

Sintomas

Se você tentar acessar a Request.ServerVariables("LOGON_USER") variável em ASP.NET, uma cadeia de caracteres vazia será retornada.

Se você estiver usando o Microsoft Visual C# .NET, a seguinte sintaxe acessará esta variável:

Request.ServerVariables["LOGON_USER"]

Motivo

Esse problema ocorre porque as variáveis relacionadas à autenticação na ServerVariables coleção não serão preenchidas se você usar a segurança do Acesso Anônimo para acessar a página .aspx. Esse problema também pode ocorrer se você fornecer ao usuário anônimo acesso na <authorization> seção do arquivo web.config .

Resolução

Para preencher a LOGON_USER variável quando você usa qualquer modo de autenticação diferente de None, você pode negar acesso ao usuário anônimo na <authorization> seção do arquivo web.config . Para negar o acesso ao usuário anônimo na <authorization> seção, siga estas etapas:

  1. Altere o modo de autenticação no arquivoweb.config para qualquer outra coisa que não Noneseja . Por exemplo, a seguinte entrada no arquivo web.config define o modo de autenticação como autenticação baseada em Formulários:

    <authentication mode="Forms" />
    
  2. Para negar o acesso ao usuário anônimo no arquivo web.config , use a seguinte sintaxe:

    <authorization>
        <deny users = "?" /> <!-- This denies access to the anonymous user -->
        <allow users ="*" /> <!-- This allows access to all users -->
    </authorization>
    

Se você estiver usando autenticação do Windows, também poderá usar as seguintes etapas para resolve esse problema:

  1. Altere o modo de autenticação no arquivoweb.config para o Windows seguinte:

    <authentication mode="Windows" />
    
  2. No Gerenciador de Serviços da Internet, clique com o botão direito do mouse no arquivo .aspx ou na pasta Projeto Web e selecione Propriedades.

  3. Se você selecionar Propriedades para a pasta Projeto Web , selecione a guia Segurança do Diretório . Se você selecionar Propriedades para o arquivo .aspx, selecione a guia Segurança do Arquivo .

  4. Em Acesso Anônimo e controle de autenticação, selecione Editar.

  5. Na caixa de diálogo Métodos de Autenticação, desmarque a caixa marcar de Acesso Anônimo e selecione a caixa de marcar Basic, Digest ou Integrated (NT Challenge/Response).

  6. Selecione OK para fechar as duas caixas de diálogo.

Status

Este é o comportamento padrão.

Mais informações

ASP.NET fornece novos modos de autenticação e esquemas de autorização, que você pode configurar nos arquivos .config. Por esse motivo, modificar os modos de autenticação apenas no IIS pode nem sempre gerar os resultados desejados. Portanto, você também deve considerar as configurações de segurança nos arquivos .config.

Observação

Ao habilitar a autenticação anônima em conjunto com autenticação do Windows ou se você conceder acesso ao usuário anônimo na <authorization> seção enquanto estiver usando qualquer modo de autenticação diferente Nonede , outras variáveis de servidor, como AUTH_USER e REMOTE_USER (assim como a HttpContext.Current.User.Identity.Name propriedade) também retornam uma cadeia de caracteres vazia. Você pode usar qualquer uma das resoluções mencionadas acima para preencher essas variáveis.

Em ASP.NET, você também pode usar a IsAuthenticated propriedade do Request objeto para determinar se a segurança do Acesso Anônimo está sendo usada. IsAuthenticatedretornará false se o Acesso Anônimo estiver ativado e retornar true se você usar qualquer outro meio de autenticação, como Forms, Passport, Integrated (NT Challenge/Response)ou Basic.

Referências