Pergunta

Estou hospedando meu aplicativo da web no Windows Server 2008 com o IIS 7.5, tenho 2 aplicativos da Web: 1. O primeiro é o serviço Core SSO (Single Sign-On) com uma página de login. 2. Outro aplicativo da Web está hospedado no mesmo servidor da web que usa o primeiro aplicativo para SSO.

Estou usando o WIF RTM para implementar o SSO,

Geralmente, está funcionando bem sem nenhum problema, o usuário pode fazer login jogar o SSO e redirecionar a página Iniciar. Mas quando faço o login, jogue o SSO primeiro, depois reinicie o IIS, se eu voltar ao segundo aplicativo e atualizar a página, recebi o seguinte erro:

Erro de Servidor na '/' Aplicação. Chave não válida para uso em estado especificado. Descrição: ocorreu uma exceção não tratada durante a execução da solicitação da Web atual. Revise o rastreamento da pilha para obter mais informações sobre o erro e onde se originou no código.

Detalhes da exceção: system.security.cryptography.cryptographicexception: chave não válida para uso no estado especificado.

Erro de origem: uma exceção não tratada foi gerada durante a execução da solicitação da web atual. As informações sobre a origem e a localização da exceção podem ser identificadas usando o rastreamento da pilha de exceção abaixo.

Stack Trace:

Cryptographicexception: chave não válida para uso em estado especificado.
System.Security.Cryptography.ProtectedData.UnProtect (Byte [] EncryptedData, Byte [] Opcionalentropy, DataProtectionScope Scope) +425
Microsoft.IdentityModel.Web.ProtectedDatacookietransform.Decode (byte [] codificado) +59

InvalidoPoperationException: ID1073: Ocorreu uma criptographicexception ao tentar descriptografar o cookie usando a API ProtectectData (consulte a exceção interna para obter detalhes). Se você estiver usando o IIS 7.5, isso pode ser devido à configuração do loadUserProfile no pool de aplicativos sendo definido como false. ] Microsoft.IdentityModel.web.protectedDatacookietransform.decode (byte [] codificado) +151
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.Applytransforms (byte [] Cookie, saída booleana) +109
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.readToken (XMLReader Reader, SecurityTokenResolver TokenResolver) +634
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.readToken (Byte [] Token, SecurityTokenResolver TokenResolver) +105
Microsoft.IdentityModel.Web.SessionAthenticationModule.ReadSessionTokenFromCookie (Byte [] sessionCookie) +239
Microsoft.IdentityModel.Web.SessionAthenticationModule.TryReadSessionTokenFromCookie (SessionsecurityToken & SessionToken) +59
Microsoft.IdentityModel.Web.SessionAthenticationModule.onauthenticaterequest (Remetente de Objeto, EventArgs EventArgs) +52
System.web.synceventexecutionstep.system.web.httpapplication.iexecutionstep.execute () +68 system.web.httpApplication.exectestep (iexecutionStep Step, boolean & completSyNChronsly) +75

________________________________________ Informações da versão: Microsoft .NET Framework Versão: 2.0.50727.4927; Versão ASP.NET: 2.0.50727.4927

A sessão do usuário é armazenada usando o modo de sessão SQLServer, estou usando um banco de dados especial para isso.

Eu tentei muito e não posso reproceter esse problema no meu computador local (Windows7). Alguém teve experiência semelhante? Você pode me dizer como resolver esse problema?

Foi útil?

Solução

Isso pode ser porque o usuário do seu pool de aplicativos não possui perfil de usuário persistente. Para corrigir isso, você pode simplesmente executar algo como esse usuário:

runas /user:<domain>\<user> cmd

E isso criará o perfil. Posteriormente, os dados devem ser descriptografados após a reinicialização do IIS.

Outras dicas

Finalmente resolvo esse problema alterando o usuário do pool de aplicativos para um usuário local. O problema provavelmente é causado pelo SSO está hospedado em um sistema operacional de 64 bits, esse problema não existe se eu hospedar o SSO em um computador de 32 bits (até eu uso um usuário de domínio para o pool de aplicativos).

Agora eu uso o ApplicationPoolIdentity ou o serviço de rede, a exceção desapareceu após reiniciar o IIS.

Obrigado a todos vocês e estou muito feliz em compartilhar minha solução com vocês.

Parece haver algum tipo de problema de segurança quando você tem vários aplicativos compartilhando o mesmo domínio no Win Server 2008 com o IIS 7.5

Se você tem URLs http://ourdomain.com/app1 e http://ourdomain.com/app2 Você pode fazer login em um aplicativo com o WIF, mas quando você acessa o outro aplicativo, recebe esse erro. Isso ocorre porque o cookie é para o domínio, mas se for criado pelo App1, o App2 não poderá acessá -lo.

Portanto, a solução é fazer como Aaron e usar um usuário específico que tenha direitos de acesso ou como fizemos, separar os aplicativos em dois domínios diferentes, ou seja, http://app1domain.com/ e http://app2domain.com/.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top