Asp.net mvc 4 &引用;密钥在指定状态下无效;.Net 4.5 MVC 4应用程序出错

Asp.net mvc 4 &引用;密钥在指定状态下无效;.Net 4.5 MVC 4应用程序出错,asp.net-mvc-4,iis-7,.net-4.5,wif,web-farm,Asp.net Mvc 4,Iis 7,.net 4.5,Wif,Web Farm,在这个问题的前言中,如果我的术语有任何错误,请原谅。这项技术对我来说很新 我在MVC 4、.Net 4.5中有一个网站,该网站是用VS 2012构建的,托管在IIS7上,并使用“身份和访问”向导使用企业身份提供商配置身份验证。我已输入STS元数据文档的路径,类似于: https://xyz.mycompany.com/app/FederationMetadata/2007-06/FederationMetadata.xml 该网站目前托管在三个不同的领域。第一个是我的本地开发环境,第二个是标准

在这个问题的前言中,如果我的术语有任何错误,请原谅。这项技术对我来说很新

我在MVC 4、.Net 4.5中有一个网站,该网站是用VS 2012构建的,托管在IIS7上,并使用“身份和访问”向导使用企业身份提供商配置身份验证。我已输入STS元数据文档的路径,类似于:

https://xyz.mycompany.com/app/FederationMetadata/2007-06/FederationMetadata.xml
该网站目前托管在三个不同的领域。第一个是我的本地开发环境,第二个是标准集成测试,第三个是开发

http://localhost/myapp
http://sit.mycompanytest.com/myapp
http://dev.mycompanytest.com/myapp
需要注意的是,“dev”子域位于web场或负载平衡或其他位置。我目前不知道负载平衡架构的确切细节

当我使用IE 10导航到上述任何一个站点时,我会被重定向到一个登录屏幕,在那里输入我的凭据并获得对给定站点的访问权限

但是,在“dev”子域中,当使用链接和表单提交在站点周围导航时,我最终会遇到以下错误:

Key not valid for use in specified state.
错误的堆栈跟踪是:

[CryptographicException: Key not valid for use in specified state.]
System.Security.Cryptography.ProtectedData.Unprotect(Byte[] encryptedData, Byte[] optionalEntropy, DataProtectionScope scope) +397
System.IdentityModel.ProtectedDataCookieTransform.Decode(Byte[] encoded) +90

[InvalidOperationException: ID1073: A CryptographicException occurred when attempting to decrypt the cookie using the ProtectedData API (see inner exception for details). If you are using IIS 7.5, this could be due to the loadUserProfile setting on the Application Pool being set to false. ]
System.IdentityModel.ProtectedDataCookieTransform.Decode(Byte[] encoded) +1158198
System.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte[] cookie, Boolean outbound) +173
System.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver) +756
System.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(Byte[] token, SecurityTokenResolver tokenResolver) +100
System.IdentityModel.Services.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte[] sessionCookie) +668
System.IdentityModel.Services.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken) +164
System.IdentityModel.Services.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs) +173
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165
我怀疑负载平衡器更改服务器时会发生错误

并且,正在考虑从以下网站获得的第二个解决方案:()。但是,该网站声明该解决方案适用于.NET4.0


这个解决方案对.NET4.5有效吗?如果没有,我该如何修复错误?

我知道负载平衡是什么问题。您必须确保服务器场共享相同的机器密钥。这可以在计算机级别或在应用程序的web.config中完成。

i负载平衡是什么问题。您必须确保服务器场共享相同的机器密钥。这可以在机器级别或在应用程序的web.config中完成。

我能够按照Vittorio Bertocci在以下帖子中的说明修复错误:

基本上,我必须使用身份和访问工具启用web场cookie


在VS 2012中,右键单击项目>选择标识访问>选择配置选项卡>选中启用web场就绪Cookie复选框>单击确定

我能够按照Vittorio Bertocci在以下帖子中的说明修复错误:

基本上,我必须使用身份和访问工具启用web场cookie


在VS 2012中,右键单击项目>选择标识访问>选择配置选项卡>选中启用web场就绪cookies复选框>单击确定删除
FedAuth
cookies可能会起作用。出现异常时,请在
Global.asax
文件的
Application\u Error
方法中尝试此操作:

Microsoft.IdentityModel.Web.FederatedAuthentication.SessionAuthenticationModule.SignOut();

删除
FedAuth
cookies可能会起作用。出现异常时,请在
Global.asax
文件的
Application\u Error
方法中尝试此操作:

Microsoft.IdentityModel.Web.FederatedAuthentication.SessionAuthenticationModule.SignOut();

谢谢你的回复。我相信我已经验证了两台机器都有相同的钥匙。我使用了MMC证书管理单元,它们都有相同的开始日期和到期日期。我还需要做什么来验证它们是否是相同的密钥?此外,每个密钥都有“网络服务”和IIS_IUSR的权限。感谢您的回复。我相信我已经验证了两台机器都有相同的钥匙。我使用了MMC证书管理单元,它们都有相同的开始日期和到期日期。我还需要做什么来验证它们是否是相同的密钥?此外,每个密钥都有“网络服务”和IIS_IUSR的权限。