维基媒体 CSRF 令牌无效

Wikimedia CSRF Token invalid

我正在使用 MediaWiki Action API,我在其中使用 OAuth2 授权流程来获取访问令牌。

要上传图片,需要 CSRF 令牌。我通过使用 header 中的授权代码向 https://commons.wikimedia.org/w/api.php?action=query&meta=tokens&format=json 发出 post 请求来获取令牌。这有效,我收到包含 CSRF 令牌的响应:

{
  "batchcomplete": "",
  "query": {
    "tokens": {
      "csrftoken": "516091e04d05c9ae2c7bca4727c071fb615ee122+\"
    }
  }
}

然后我使用此令牌并立即检查其有效性,向 https://commons.wikimedia.org/w/api.php?action=checktoken&type=csrf&format=json 发出 post 请求并在 body 中获得令牌(根据 api 文档)。这些请求彼此之间发生的时间不到一秒。但是,响应总是 'invalid':

{
  "checktoken": {
    "result": "invalid",
    "generated": "2021-10-07T12:07:20Z"
  }
}

我正在使用 Dart/Flutter 顺便说一下,但我怀疑这就是问题所在。

想了很久终于想通了,答案再简单不过了:

checktoken 操作仍然需要 header 中的 oAuth 2 访问令牌。有了这个,一切都可以正常工作。我希望这至少能帮助到其他人。