.net framework 4.5.1 加密操作期间发生错误
error occurred during a cryptographic operation .net framework 4.5.1
我正在使用 angularjs 和 Web API。为了对用户进行身份验证,我使用了 FormAuthenticationTicket(我只是用用户数据创建票证,对其进行加密,然后 return 发送给客户端)。
当客户端发送请求时,他将这个加密的 cookie 添加到他的请求的 header。
我在远程服务器上解密票证,并验证该用户是否合法。
在 localhost 上它完美地工作。
在服务器上我有一个错误,并且在很短的时间后无法识别用户。
经过多次调试,我注意到有时当服务器试图解密票时,他会得到异常:"error occurred during a cryptographic operation"
我用谷歌搜索了这个错误,据我了解,这个错误是因为服务器试图用另一个机器密钥解密票。
以为在 web.config 中设置机器密钥可能会解决问题,但我发现的所有文章都在谈论早期的 .net 框架版本(我使用的是 4.5.1)。
这是我收到错误的时间:
FormsAuthenticationTicket fat = FormsAuthentication.Decrypt(enc_ticket);
这是我的 web.config:
<configuration><appSettings></appSettings>
<system.web> <compilation debug="true" targetFramework="4.5.1">
<assemblies>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5.1" />
<customErrors mode="Off"/>
<trust level="Full" />
</system.web>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
</configuration>
经过多次研究,这就是我解决问题的方法:
Generate the machine key here 并将机器密钥值添加到 web.config。此机器密钥将始终用于您托管网站的 webfarm 上的任何服务器。
我正在使用 angularjs 和 Web API。为了对用户进行身份验证,我使用了 FormAuthenticationTicket(我只是用用户数据创建票证,对其进行加密,然后 return 发送给客户端)。 当客户端发送请求时,他将这个加密的 cookie 添加到他的请求的 header。
我在远程服务器上解密票证,并验证该用户是否合法。 在 localhost 上它完美地工作。 在服务器上我有一个错误,并且在很短的时间后无法识别用户。 经过多次调试,我注意到有时当服务器试图解密票时,他会得到异常:"error occurred during a cryptographic operation"
我用谷歌搜索了这个错误,据我了解,这个错误是因为服务器试图用另一个机器密钥解密票。
以为在 web.config 中设置机器密钥可能会解决问题,但我发现的所有文章都在谈论早期的 .net 框架版本(我使用的是 4.5.1)。
这是我收到错误的时间:
FormsAuthenticationTicket fat = FormsAuthentication.Decrypt(enc_ticket);
这是我的 web.config:
<configuration><appSettings></appSettings>
<system.web> <compilation debug="true" targetFramework="4.5.1">
<assemblies>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5.1" />
<customErrors mode="Off"/>
<trust level="Full" />
</system.web>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
</configuration>
经过多次研究,这就是我解决问题的方法:
Generate the machine key here 并将机器密钥值添加到 web.config。此机器密钥将始终用于您托管网站的 webfarm 上的任何服务器。