Encryption IISRESET后,密钥在指定状态下无效

Encryption IISRESET后,密钥在指定状态下无效,encryption,session-cookies,wif,Encryption,Session Cookies,Wif,我已经创建了一个定制的STS登录应用程序,登录/注销功能运行良好。但是如果我以某个用户的身份登录并执行IISRESET,然后重新加载页面,则会出现以下错误。(但正如所料,在我清除cookies并再次登录后,它工作正常:) STS应用程序的Apppool用户为“A”,他从未登录过部署STS应用程序的服务器计算机(他在administrators组中,有权访问加密证书) 我曾经尝试以“A”的身份登录到服务器(Windows登录),之后这个问题突然解决了 有人能告诉我为什么IISRESET后它不工作,

我已经创建了一个定制的STS登录应用程序,登录/注销功能运行良好。但是如果我以某个用户的身份登录并执行IISRESET,然后重新加载页面,则会出现以下错误。(但正如所料,在我清除cookies并再次登录后,它工作正常:)

STS应用程序的Apppool用户为“A”,他从未登录过部署STS应用程序的服务器计算机(他在administrators组中,有权访问加密证书)

我曾经尝试以“A”的身份登录到服务器(Windows登录),之后这个问题突然解决了

有人能告诉我为什么IISRESET后它不工作,windows登录一次后它就工作了吗?

“/”应用程序中出现服务器错误

键在指定状态下无效

[加密例外:密钥在指定状态下无效。]

System.Security.Cryptography.ProtectedData.Unprotect(Byte[] encryptedData, Byte[] optionalEntropy, DataProtectionScope scope)
Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Decode(Byte[] encoded)
[InvalidOperationException: 1D1073: A CryptographicException occurred when attempting to decrypt the cookie using the ProtectedData API (see inner exception for details).
Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Decode(Byte[] encoded) +433
Microsoft.IdentityModel .Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte] cookie, Boolean outbound) +189
Microsoft. IdentityModel .Tokens. SessionSecurityTokenHandler. ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver) +894
Microsoft. IdentityModel .Tokens. SessionSecurityTokenHandler. ReadToken(Byte]] token, SecurityTokenResolver tokenResolver) +118
Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenrrocCookie(Byte] sessionCookie) +363
Microsoft.IdentityModel.Web. SessionAuthenticationModule.TryReadSessionTokenFroaCookie(SessionSecurityToken& sessionToken) +124
Microsoft. IdentityModel .Web. SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs) +61
System.Web.SyncEventExecutionstep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System. Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270
Version Information: Microsoft .NET Framework Version:4.D.30319; ASP NET Version:4.O.30319.272

如果使用默认WIF配置运行,则用于保护会话令牌的密钥将通过DPAPI处理,并存储在用户配置文件中。除非将IIS配置为“Load User Profile”(加载用户配置文件)为true,否则这些密钥在iisreset上会更改


如果您在.NET 4.5上运行,最简单的方法是为应用程序配置machineKeys,并使用新的
MachineKeySessionSecurityTokenHandler
,如中所述。

如果您使用默认WIF配置运行,用于保护会话令牌的密钥通过DPAPI进行处理,并存储在用户配置文件中。除非将IIS配置为“Load User Profile”(加载用户配置文件)为true,否则这些密钥在iisreset上会更改


如果您在.NET 4.5上运行,最简单的方法是为应用程序配置machineKeys,并使用新的
MachineKeySessionSecurityTokenHandler
,如中所述。

是的,我发现这就是问题所在。我们通过使用基于证书的会话cookie加密和解密修复了它,因为我们面临负载平衡服务器的问题。静态var_CookietTransforms=new ReadOnlyCollection(new CookietTransform[]{new deflateCookietTransform(),new rsaEncryptionCookietTransform(Certificate),新的RsaSignatureCookieTransform(证书)});publiccustomsessionsecuritytokenhandler():base(_CookietTransforms){}也可以工作-这是WIF 3.5的常见解决方案。如果您在负载平衡的服务器上运行,我假设您已经为应用程序指定了machinekey。新的基于machinekey的令牌处理程序将为您省去安装证书的麻烦。:)很高兴你让它工作了。是的,这是我发现的问题。我们通过使用基于证书的会话cookie加密和解密修复了它,因为我们面临负载平衡服务器的问题。静态var_CookietTransforms=new ReadOnlyCollection(new CookietTransform[]{new deflateCookietTransform(),new rsaEncryptionCookietTransform(Certificate),新的RsaSignatureCookieTransform(证书)});publiccustomsessionsecuritytokenhandler():base(_CookietTransforms){}也可以工作-这是WIF 3.5的常见解决方案。如果您在负载平衡的服务器上运行,我假设您已经为应用程序指定了machinekey。新的基于machinekey的令牌处理程序将为您省去安装证书的麻烦。:)很高兴你让它工作了。