维基媒体 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 访问令牌。有了这个,一切都可以正常工作。我希望这至少能帮助到其他人。
我正在使用 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 访问令牌。有了这个,一切都可以正常工作。我希望这至少能帮助到其他人。