Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 密钥在指定状态下无效,无法使用。IIS重置后_Asp.net_.net_Iis_Single Sign On_Wif - Fatal编程技术网

Asp.net 密钥在指定状态下无效,无法使用。IIS重置后

Asp.net 密钥在指定状态下无效,无法使用。IIS重置后,asp.net,.net,iis,single-sign-on,wif,Asp.net,.net,Iis,Single Sign On,Wif,我试过这个: runas/user:domain\user cmd没有运气 这似乎只有在IIS重置并且我尝试恢复浏览会话时才会发生。因此,我登录到应用程序,在服务器上重置IIS,刷新页面并查看错误 我正在.NET4.0MVC中构建一个应用程序,其中包含一个使用WIF4.0的安全令牌服务。除此之外,一切正常。我甚至尝试使用自定义错误页面,但错误也发生在那里。因此,我也无法显示自定义页面。另外,这是使用位于两个负载平衡服务器上的证书。这种情况发生在我的开发环境中,该环境只包含一台服务器(应用程序、w

我试过这个:

runas/user:domain\user cmd没有运气

这似乎只有在IIS重置并且我尝试恢复浏览会话时才会发生。因此,我登录到应用程序,在服务器上重置IIS,刷新页面并查看错误

我正在.NET4.0MVC中构建一个应用程序,其中包含一个使用WIF4.0的安全令牌服务。除此之外,一切正常。我甚至尝试使用自定义错误页面,但错误也发生在那里。因此,我也无法显示自定义页面。另外,这是使用位于两个负载平衡服务器上的证书。这种情况发生在我的开发环境中,该环境只包含一台服务器(应用程序、wfe、db在那里运行)

我注意到的一件事是,如果我将我的IIS应用程序池用户切换回网络服务帐户,它将不再抛出错误。我们在应用程序中有一些限制(主要与网络相关),我们需要在应用程序池部分的广告中使用帐户

有人对这个问题有经验吗

密钥在指定状态下无效,无法使用

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

例外情况详情: System.Security.Cryptography.CryptographyException:密钥对无效 在指定状态下使用

源错误:

在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常

堆栈跟踪:

[加密异常:密钥在指定状态下无效。]
System.Security.Cryptography.ProtectedData.Unprotect(字节[]) 加密数据,字节[]可选熵,数据保护范围)+428 Microsoft.IdentityModel.Web.ProtectedDataCookietTransform.Decode(字节[]) 编码)+54

[InvalidOperationException:ID1073:发生加密异常 尝试使用ProtectedData API解密cookie时(请参阅 详细信息的内部异常)。如果您使用的是IIS 7.5,这可能是 由于正在设置的应用程序池上的loadUserProfile设置 设置为false。]
Microsoft.IdentityModel.Web.ProtectedDataCookietTransform.Decode(字节[]) 编码)+146
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(字节[]) cookie,布尔出站)+113
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader 读卡器,安全令牌解析程序令牌解析程序)+647
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(字节[]) 令牌,安全令牌解析程序令牌解析程序)+105
Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie(字节[]) sessioncokie)+262
Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken)+76
Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticationateRequest(对象 发件人,EventArgs EventArgs)+53
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+75


此问题与会话cookie有关

WIF默认使用数据保护API()保护会话cookie,并且DPAPI与机器密钥密切相关

如果用于加密会话cookies的密钥发生更改,则会引发此异常

它也可能与你的应用程序托管基础设施有关

  • 如果您的应用程序正在网络负载平衡器(NLB)环境中运行
  • 如果更改应用程序池设置(例如,更改应用程序池的用户)
有关此方案的更多详细信息,请参见MSDN博客条目:

托德·福斯特(2012年10月29日)

因此,如果您的应用程序在NLB环境中运行,您可以:

  • 将负载平衡器配置为使用粘性会话。这意味着您的用户将在会话期间被定向到同一服务器。(我不太喜欢那个)
  • 使用证书加密会话cookie
  • 将所有
    web.config
    文件设置为在
    system.web
如果您没有在NLB环境中运行应用程序,您可以尝试:

  • web.config
    中的
    machinekey
    设置为使用预定义值而不是自动生成的值
关于自动生成的
machinekey
设置,请参见:


听起来像是一个加密的连接字符串,它解释了为什么将应用程序池用户切换回orig可以解决这个问题。尝试解密字符串,然后更改应用程序池用户。hmmm很有趣,但我的连接字符串在任何地方都没有加密。