AntiForgery.GetTokens:oldCookieToken参数的目的是什么?

我们在objective-c中编写了一个iOS移动应用程序,它可以发布我们的ASP.NET MVC服务器应用程序。 在iPhone上,HTTP堆栈(和cookie等)似乎与Safari共享。 这让我们对XSRF攻击持开放态度,所以除非我弄错了,否则我们需要使用防伪令牌保护POST并使用ValidateAntiForgeryTokenAttribute保护我们的控制器方法。

我将通过说我没有正确理解防伪标记生成和validation的机制来限定这个问题……特别是,在这种情况下使用的术语“随机数”有些神秘。

因为我们不向客户端提供HTML,所以我们不能使用标准的@Html.AntiForgeryToken() ,因此我们必须使用AntiForgery.GetTokens来获取令牌并将其分发给我们的客户。 这有一个神秘的第一个参数: oldCookieToken 。 目前,我只是将它设置为null ,一切似乎都正常。 那么任何人都可以告诉我……将旧令牌提供给令牌生成算法有什么用? 如果我们的iOS应用程序只发出一个令牌并重复用于多个post,那么这会有问题吗?

AntiForgery.GetTokens将尝试重用旧的cookie令牌进行validation。 因此,如果您已经拥有要重用的validation令牌,它将尝试使用它而不是生成新的令牌。 如果旧令牌无效,它将生成一个新令牌并改为使用它。

因此将null传递给oldCookieToken是有效的。 它只是告诉GetTokens始终生成一个新的cookie令牌。