我创建了一个自定义STS登录应用程序,并且登录/注销功能正常运行。但是,如果我以某个用户身份登录并执行 IISRESET 然后重新加载页面,则会出现以下错误。 (但正如预期的那样,在我清除了cookie并再次登录后,它工作正常:))
STS应用程序的Apppool用户是“A”,并且他从未登录到部署了STS应用程序的服务器计算机(他在管理员组中并且可以访问加密证书)。
我尝试以“A”身份登录服务器( Windows登录),然后突然解决了这个问题。
任何人都可以告诉为什么它在IISRESET之后无效并且在Windows登录后工作一次?
>应用程序中的服务器错误。密钥无法在指定状态下使用。
[CryptographicException:密钥无法在指定状态下使用。]
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
答案 0 :(得分:1)
如果您使用默认WIF配置运行,则用于保护会话令牌的密钥将通过DPAPI处理并存储在用户配置文件中。除非您将“加载用户配置文件”配置为true,否则这些键会在iisreset上更改。
如果您在.NET 4.5上运行,最简单的方法是为您的应用程序配置machineKeys并使用新的MachineKeySessionSecurityTokenHandler
,如Wif and Web Farms中所述。