首页 > 解决方案 > 使用 Bot 用户从 MediaWiki 中的受保护页面读取

问题描述

使用管理员用户,我创建了一个专用用户来拥有机器人;我将此机器人添加到“机器人”组。我使用这个用户登录并为我的应用程序创建了一个BotPassword,并授予它机器人可以拥有的所有可能权限。

我在我的LocalSettings.php

$wgGroupPermissions['*']['read'] = false;
$wgGroupPermissions['bot']['read'] = true;

从我的应用程序中,我可以使用登录 API成功登录- 获取令牌后:

在登录

{
    "login": {
        "result":"Success",
        "lguserid":11,
        "lgusername":"botuser@example.org"
    }
}

但是,使用以下参数来查询页面:

ArrayList<BasicNameValuePair> queryParameters = new ArrayList<>();
queryParameters.add(new BasicNameValuePair("action", "query"));
queryParameters.add(new BasicNameValuePair("prop", "revisions"));
queryParameters.add(new BasicNameValuePair("rvprop", "content"));
queryParameters.add(new BasicNameValuePair("format", "json"));
queryParameters.add(new BasicNameValuePair("formatversion", "2"));
queryParameters.add(new BasicNameValuePair("rvslots", "main"));
queryParameters.add(new BasicNameValuePair("titles", pageName));

我得到错误:

{
    "error": {
        "code":"readapidenied",
        "info":"You need read permission to use this module.",
        "docref":"See https://wiki.example.org/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; for notice of API deprecations and breaking changes."
    }
}

如果我在 LocalSettings 中授予全局读取权限,

$wgGroupPermissions['*']['read'] = true;

然后我的机器人用户能够毫无错误地获取页面 -


如何授予此机器人权限,以便我可以查询页面内容而不会出现readapidenied错误,同时仍保持我的 Wiki 私有?不同组中的 BotPassword 帐户是主用户吗?如果是这样,我该如何更改机器人的组?

我正在运行MediaWiki: 1.32.0PHP: 7.2.16我使用ImapAuthorization进行用户登录。

标签: mediawikimediawiki-api

解决方案


您需要在 Special:BotPasswords 中设置机器人可以访问的权限。这个想法是您的机器人密码的存储安全性低于您的真实密码(可能包含在某些共享服务器上的某些机器人配置文件中),因此您需要限制它的用途。


推荐阅读