ASP.NET MVC防伪令牌问题

4
我们正在使用Amazon EC2 Elastic Beanstalk运行一个ASP.NET MVC 4网站,在用户尝试登录后出现错误:
“反CSRF令牌无法解密。如果此应用程序由Web Farm或群集托管,请确保所有计算机都运行相同版本的ASP.NET Web Pages,并且配置指定明确的加密和验证密钥。在集群中不能使用AutoGenerate。”
我们认为问题可能是会话状态在内部处理并且具有动态实例,因此我们将其移至SQL Server,但仍然遇到错误。奇怪的是,有时候登录正常,有时候会出现错误。
在EC2等动态Web服务器环境下处理ASP.NET MVC的这个问题,是否需要做一些特殊的事情呢?

1
http://iamdotnetcrazy.blogspot.co.uk/2013/08/how-to-solve-anti-forgery-token-could.html - Zaki
3个回答

3

您需要在webconfig中明确设置解密密钥和验证密钥。

<configuration>
  <system.web>
    <machineKey decryptionKey="Decryption key goes here, IsolateApps" 
                validationKey="Validation key goes here, IsolateApps" />
  </system.web>
</configuration>

您可以查看以下文章获取详细信息:http://iamdotnetcrazy.blogspot.com/2013/08/how-to-solve-anti-forgery-token-could.html。该文章涉及解决防伪令牌可能会被重复使用的问题。

谢谢,这个完美地解决了我的问题。我没有使用IsolateApps部分,那个是必须的吗? - Austin
很高兴知道它起作用了,不需要的,原因在这里https://dev59.com/KWUp5IYBdhLWcg3w3KTe#15400821 - Hossam Barakat
只是检查是否有其他选项,而不是添加机器密钥。如果我更改服务器,将不得不在我的配置文件上继续更新机器密钥。 - user2081126

1

我移除了 'IsolatedApps',这对我来说似乎起作用了。


0
我的解决方法是这样获取cookie和表单令牌值的:
AntiForgery.GetTokens(null, out var cookieToken, out var formToken);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接