asp.net-mvc – MVC反伪造令牌如何在Web服务器重启之间存活?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – MVC反伪造令牌如何在Web服务器重启之间存活?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经使用MVC 5中的ValidateAntiForgeryTokenAttribute实现了防伪保护.它工作正常,但是在未来我们可能会转向更多的“网络农场”托管方法.如果我在开发中运行我的应用程序并转到表单,重新启动Web服务器(通过在Visual Studio中重新启动应用程序)然后提交表单,它不会抛出System.Web.Mvc.HttpAntiForgeryException.

我们的应用程序不使用任何其他会话状态.有人可以帮助我理解我的服务器如何从它停止的地方开始?我没有在我的web.config或我能找到的任何其他地方定义machineKey.它与在开发环境中运行有关吗?

我能找到的唯一引用是针对早期版本的MVC,所以我想知道现在是否以不同的方式解决了这个问题.

我很高兴这个功能有效,但我需要了解原因.

解决方法

服务器本身不记得任何东西;它不必.

这里的两件事是:

>表单隐藏输入
>一个cookie

这意味着如果用户访问其上带有AntiForgeryToken的页面,那么服务器将重新启动,这没有问题,因为用户和表单的__RequestVerificationToken仍然是相同的.

实际的安全令牌是一个存储在AntiForgeryToken对象中的哈希键.此对象序列化为Base 64,这是您在查看__RequestVerificationToken的值时看到的内容.由于每次都存储安全密钥,即使服务器重置,值仍然在这些对象内.然后检索并比较密钥以验证令牌.

在此过程中没有解密.对令牌进行反序列化,读取安全密钥然后进行比较.由于安全密钥未加密,而是加密,因此无法解密;只比较.

猜你在找的asp.Net相关文章