IIS 7 Usuário Errado da Autenticação do Windows

2

IIS 7, pool de aplicativos integrado, identidade definida como NetworkService

Recentemente, movemos um asp.net MVC 3 para nosso ambiente de produção. O aplicativo usa a autenticação do Windows. O ambiente de produção é configurado em um farm da Web no IIS 7, executando o Win 2008 (não tenho certeza se R2). Existem dois servidores configurados para executar o aplicativo da Web.

Tivemos duas ocasiões (com intervalo de aproximadamente 1 semana) em que os usuários estão sendo autenticados como usuários diferentes de si mesmos. Verificando os logs do IIS, parece que depois de algum ponto, todas as solicitações são autenticadas como um usuário específico. No log também há entradas com X-ARR-LOG que aparentemente é Application Request Routing Module (não tenho certeza se está relacionado, mas mais informações podem ser úteis ..). Meu histórico de rede não é muito strong, mas nossos recursos de rede não tiveram a menor chance de encontrar o problema.

Existem ferramentas de diagnóstico que podemos executar para ver de onde o problema pode estar vindo? É provável que algo esteja configurado incorretamente no farm da Web que possa estar causando esse problema?

Um fator importante é que, no log do IIS, há solicitações de uma página html simples que não passa pelo pipeline asp.net e, no log, essa entrada é solicitada pelo usuário mencionado acima. Então, parece que depois que o problema aparece, todas as solicitações parecem ser autenticadas sob a mesma conta de usuário.

Aprecie qualquer ajuda, sugestões que você pode fornecer

Atualização:

Estamos analisando como estamos determinando que usuários diferentes estão sendo autenticados como um usuário ...

No log do IIS, estamos vendo a coluna cs-username que, de acordo com a documentação, é definida pelo IIS. Podemos ver solicitações diferentes de IPs diferentes, em locais diferentes que possuem o mesmo nome de usuário cs. No log, todas as solicitações têm um nome de usuário cs diferente até que, de repente, todas as solicitações são do mesmo nome de usuário cs. Conseguimos redefinir esse problema removendo os servidores do farm e reciclando o pool de aplicativos. Não tenho certeza especificamente qual desses dois nos ajudou a "redefinir" o problema. Também mencionamos que algumas das solicitações são para uma página html simples, que não passa pelo pipeline asp.net, (acredite que ela é usada por uma ferramenta de monitoramento, como é chamada sitecheck.html) e essas solicitações abruptamente têm o mesmo cs-username. Além disso, o próprio aplicativo usa o WindowsIdentity para exibir dados específicos do usuário, que é o que nos levou a analisar o problema um pouco mais ...

    
por B Z 14.02.2012 / 18:55

1 resposta

2

link

link

Problema na sessão com o IIS7
link

Sessões do IIS7 sendo cruzadas / misturadas / copiadas link

O sintoma

Os usuários relataram ter visto dados que não pertenciam a eles quando fizeram login em suas contas. Registros mostraram que quase 10% de nossos usuários recebiam cópias de sessões de outros usuários. O objeto de sessão inteiro foi copiado, incluindo as variáveis de sessão e sessionID. Uma vez duplicadas, as sessões individuais poderiam ser modificadas sem afetar a outra (ou seja, abandonar uma não mataria a outra).

Para detectar ocorrências do problema, armazenei o Request.RemoteHost (o endereço IP do computador que faz a solicitação) em uma variável de sessão. No início de cada solicitação, verifiquei se o IP da sessão correspondia ao IP da solicitação atual.

O que não foi

É possível que o IP mude naturalmente, mais simplesmente se um usuário redefinir seu roteador / modem. Este não foi o caso porque estava acontecendo muito frequentemente. Além disso, ocorreram casos confirmados de dados de um usuário sendo cruzados com outro. Por fim, alguns dos pares de IPs não estavam em computadores diferentes, mas em países diferentes.

Também é possível, e muitas vezes foi sugerido, que a sessão Variáveis podem deixar de ser únicas se forem usadas com variáveis estáticas / compartilhadas dentro do WebApp. Este não foi o caso, porque o endereço IP que eu armazenei na sessão foi escrito apenas uma vez, a partir da requisição e depois foi lido apenas para comparar com a requisição. Isso também foi descartado porque o SessionID também foi duplicado e esse é um valor somente leitura.

O que é

É um recurso / bug no IIS7. Esta versão mais recente do IIS introduziu alguns novos recursos de cache.

> O IIS7 armazena automaticamente o conteúdo estático, como páginas HTML, imagens e folhas de estilo.
O IIS7 agora tem a capacidade de armazenar em cache o conteúdo dinâmico também.

O armazenamento em cache de conteúdo dinâmico é ótimo se for uma página como uma galeria de imagens gerada dinamicamente ou uma página gerada dinamicamente com base na cultura do navegador. No entanto, neste tópico, link , Anil Ruia, engenheira sênior de design de software do IIS Core, explica < em> “Você não deve estar habilitando o cache de saída para qualquer resposta que dependa do estado da sessão.”

Se a página que gera o conteúdo depender do estado da sessão, ele armazenará em cache o objeto da sessão junto com o restante da página. O próximo usuário a chegar acaba puxando a sessão em cache, em vez de obter uma nova. Quando chequei as configurações, descobri que ele estava configurado para armazenar em cache todas as páginas .aspx por três minutos, incluindo muitas páginas que acessam a sessão.

A solução

Editar regra de cache

No IIS7, desative o cache para páginas .aspx em qualquer diretório com uma página asp.net que dependa do estado da sessão. Para fazer isso:

Run the Server Management console.
Navigate to Roles -> Web Server (IIS) -> Internet Information Services.
Select the site you wish to modify.
Select the folder that contains the .aspx pages you need to turn caching off for.
In the Feature View, double-click “Output Caching”.
If there is a rule there already for the .aspx extension double click it. Otherwise right click and select “Add…”
Enter .aspx for the “File name extension”
Check “User-mode caching”
Select “Prevent all caching”
Check “Kernel-mode caching”
Select “Prevent all caching”
Click OK
Close the Server management Console
    
por 14.02.2012 / 22:37