Por que o ASP.NET gera automaticamente chaves de máquina diferentes quando o IsolateApps está desativado?

2

Estou hospedando dois aplicativos da Web no IIS 7.5. Eles devem compartilhar o cookie de autenticação de formulários do ASP.NET. Como eu não quero colocar a chave da máquina no Web.config (não estou usando farms da web e não quero que a chave fique visível no arquivo web.config), configurei-a para gerar automaticamente com o seguinte configuração:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" />

De acordo com a documentação , isso deve fazer com que o IIS gere automaticamente a mesma chave de máquina para os dois aplicativos da web. Nas minhas máquinas de desenvolvedor do Windows 7 e Windows 8, isso funciona como esperado. Qualquer aplicativo da Web pode autenticar o usuário e os dois aplicativos reconhecem o mesmo cookie de autenticação.

Mas, quando eu movo essa configuração para produção em execução no Windows Server 2008 R2, os dois aplicativos não compartilham o cookie de autenticação. Quando o WebAppA autentica o usuário, o WebAppB não pode descriptografar o cookie de autenticação e força o usuário a se autenticar novamente. Quando isso acontece, o novo cookie de autenticação não é válido para o WebAppA.

Eu provei que está usando chaves de máquina separadas definindo explicitamente a chave da máquina em ambos os aplicativos para a mesma chave:

<machineKey validationKey="F801AB..." decryptionKey="ADB3C1..." />

Quando faço isso, a autenticação funciona como nas minhas máquinas de desenvolvedor.

Qual diferença entre meus ambientes de desenvolvimento e produção pode estar causando isso?

    
por Stephen Jennings 09.05.2015 / 08:37

1 resposta

7

Quando o IIS gera automaticamente uma chave de máquina, ela é armazenada em HKEY_CURRENT_USER . Portanto, para compartilhar chaves de máquina geradas automaticamente, os aplicativos da web devem estar em execução como o mesmo usuário. Os detalhes estão em esta postagem no blog . O trecho relevante é:

The base machine key is stored in the registry in the following location:

HKCU\Software\Microsoft\ASP.NET.0.30319.0\AutoGenKeyV4

Note that this key sits in the HKEY_CURRENT_USER hive, so the generated machine key belongs to the user’s that runs the application profile. This means that if you have two applications in IIS which are running with the same process identity, they will use the same machine key!

No meu caso, os dois aplicativos da web estavam sendo executados em pools de aplicativos separados sob diferentes identidades. Portanto, eles geraram diferentes chaves de máquina. Nas minhas máquinas de desenvolvedores, elas estavam funcionando com a mesma identidade.

Ao colocar os dois aplicativos no mesmo pool de aplicativos (ou em ambos os pools de aplicativos com a mesma identidade), eles usaram a mesma chave de máquina gerada automaticamente.

    
por 09.05.2015 / 08:37