我已将我的网站上传到网站主办,并出现此错误;
' 加密操作期间发生错误。'。
我已经完成了一些研究,似乎formuthenticated cookie绑定到MachineKey(使用webhost时有所不同)。
我找到了一种方法可以解决这个问题,但错误仍然存在
的 CODE:
/// <summary>
/// This method removes a cookie if the machine key is different than the one that saved the cookie;
/// </summary>
protected void Application_Error(object sender, EventArgs e)
{
var error = Server.GetLastError();
var cryptoEx = error as CryptographicException;
if (cryptoEx != null)
{
FederatedAuthentication.WSFederationAuthenticationModule.SignOut();
Global.Cookies.FormAuthenticated Cookie = new Global.Cookies.FormAuthenticated();
Cookie.Delete();
Server.ClearError();
}
}
的堆栈跟踪:
[CryptographicException: Error occurred during a cryptographic operation.]
System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func, Byte[] input) +115
System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.Unprotect(Byte[] protectedData) +59
System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) +9824926
Archive_Template.Main.resolveLoginUser(String sessionKey) in f:\Archive_Template\Archive_Template\Main.aspx.cs:481
Archive_Template.Main.OnPreInit(EventArgs e) in f:\Archive_Template\Archive_Template\Main.aspx.cs:52
System.Web.UI.Page.PerformPreInit() +31
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +335
答案 0 :(得分:23)
对于尚未解决问题的人,我在web.config中错过了加密/解密的“machineKey”条目
答案 1 :(得分:22)
我遇到了同样的问题。 我刚刚清除了所有浏览器的Cookie 和缓存数据,并且它已修复。我希望它也适用于您。
答案 2 :(得分:17)
如果您使用的是表单身份验证。您可以在捕获异常时注销,并允许您的用户登录并创建有效的cookie
catch (CryptographicException cex)
{
FormsAuthentication.SignOut();
}
答案 3 :(得分:7)
这是由于缺少机器密钥,它被用作对称密钥来进行加密和解密。
在IIS中设置计算机;
转到您的应用程序 - &gt;机器钥匙 - &gt;生成密钥
答案 4 :(得分:5)
当我尝试使用ASP.NET 2.0应用程序创建的表单身份验证cookie并在.NET4.5 Web API项目中解密时,我遇到了这个问题。解决方案是在web api的web.config文件中的“machineKey”节点中添加一个名为“compatibilityMode”的属性:
<machineKey
...
compatibilityMode="Framework20SP2"/>
从文档中,以下是该属性的允许值:
答案 5 :(得分:5)
我还有这个,我从数据库中删除了UserTokenCaches表条目。
答案 6 :(得分:3)
在开发新解决方案并在localhost上运行网站时,我也遇到过这种情况。设置machinekey没有区别,但只是删除localhost的所有cookie解决了这个问题。
答案 7 :(得分:3)
protected void Application_Error(object sender_, CommandEventArgs e_)
{
Exception exception = Server.GetLastError();
if(exception is CryptographicException)
{
FormsAuthentication.SignOut();
}
}
只要您使用Forms身份验证(登录/密码),就可以在Catching errors in Global.asax的Global.asax.cs中。为我工作。
答案 8 :(得分:3)
另一种选择是从浏览器设置中清除cookie,这样就可以存储新的cookie。
答案 9 :(得分:2)
如果在实施单点登录时收到此错误(如此处所述http://www.alexboyang.com/2014/05/28/sso-for-asp-net-mvc4-and-mvc5-web-apps-shared-the-same-domain/),请确保在所有项目中具有相同的目标框架。我有一个项目使用.NET 4.0,另一个项目使用.NET 4.5.2。
将第一个更改为4.5.2为我解决了问题。
答案 10 :(得分:1)
验证AntiForgery令牌时,我收到了加密错误。
我相信这是因为我刚刚对我的服务器进行了一些安全控制配置更改,以便在虚拟内存限制达到1,000,000千字节时将应用程序回收配置为回收。
对于虚拟内存回收而言,这绝对太少了。私有内存使用量可以设置为1,000,000 KB,但虚拟内存应该有更多的空间。
我注意到我的应用程序经常被回收利用。
我将虚拟内存限制增加到10,000,000 KB,这些错误消失了。我相信应用程序池可能已经在我填写表单时进行了回收。
答案 11 :(得分:0)
我有同样的问题: MVC 5 ASP.Net Web应用程序.net Framework 4.6.1
解决方案:
答案 12 :(得分:0)
对我来说,是<httpRuntime targetFramework="4.7.2"/>
引起了兼容性问题。当webApi使用{{时,我的应用程序未在web.config的<httpRuntime targetFramework="4.7.2"/>
中使用targetFramework =“ 4.7.2”参数。 1}}。从WebApi中删除参数或在应用程序中添加参数就可以了。
答案 13 :(得分:0)
当有人决定将加密算法更改为DES(一种非常古老的加密标准)时,我遇到了这个问题。将其移回AES(一种更现代的加密标准)可以清除错误。
可能与禁用DES的组策略有关...
加密算法隐藏在“机器密钥”部分(使用IIS)中。也许也可以在web.config中进行设置。