【问题标题】:MediaWiki bot users read rights?MediaWiki bot 用户阅读权限?
【发布时间】:2017-04-16 08:46:47
【问题描述】:

随着 MediaWiki 1.27 的更新,对 API 进行了一些身份验证更改(通常与 Wiki 引擎的身份验证更改一起进行)。作为其中的一部分,我似乎在设置为不允许匿名用户阅读的 wiki 中遇到权限错误。

wiki 有 $wgGroupPermissions['*']['read'] = false; 来关闭匿名用户的访问权限。

但是使用由新的Special:BotPasswords 页面创建的机器人似乎有问题。我为现有的admin 用户创建了一个机器人,它授予对新机器人的“基本权限”访问作为基线(“基本权限”包括readwriteapi)。

使用 API,我可以成功获取登录令牌并登录(返回 cookie 以设置会话),但随后使用该会话 cookie 尝试执行页面查询(例如,列出 allpages)结果在 readapidenied 错误中(“您需要读取权限才能使用此模块”)。

readapi 是我必须在某处授予的新权限吗?或者,仅提供会话 cookie 不足以将页面列表请求链接到登录请求(如何将授权从 login 呼叫转发到其他呼叫?)?或者这只是新 Bot 用户基础架构中的一个错误?

我猜我的错误在于将会话信息传递给列表查询,因为如果我暂时将$wgGroupPermissions['*']['read'] 放回true,并使用assert=user 查询选项,它会返回一个@ 987654333@错误,提示用户未登录。

【问题讨论】:

    标签: php mediawiki bots mediawiki-api


    【解决方案1】:

    在这种情况下,它与BotPassword 基础设施无关,而是一个单独的扩展:

    我在这个 wiki 上还有一个自定义会话提供程序(ImmutableSessionProviderWithCookie),它没有正确地避开BotPassword 会话提供程序。

    因此,如果您有一个不应该对 API 请求处于活动状态的会话提供程序:

    • 确保会话提供程序从newSessionInfo 调用返回null。默认情况下,ImmutableSessionProviderWithCookie 实现将已经从此调用返回 null,因为 canChangeUser 返回 false。如果您的实现更改了该逻辑,以至于在某些情况下 newSessionInfo 返回非 null,则您必须覆盖它。
    • 在您的 Session Provider 的 provideSessionInfo( WebRequest $request ) 方法中,添加:

      // For API requests, ignore
      if ( defined( 'MW_API' )) {
          return null;
      }
      

    只要newSessionInfo 方法和provideSessionInfo 方法都返回null,就不会为该会话提供者创建会话cookie,因此它不会干扰其他会话cookie提供者(如BotPassword )。

    【讨论】:

    • ImmutableSessionProviderWithCookie::newSessionInfo 总是返回 null,通常不可变的提供者不这样做会很奇怪,因为不变性的全部意义在于提供者无法控制所使用的任何凭据对会话进行身份验证。
    • 是的,ImmutableSessionProviderWithCookie 默认使用SessionProvider::newSessionInfo 逻辑,它返回空值,因为ImmutableSessionProviderWithCookie::canChangeUserfalse。但在我的情况下,自定义 Session Provider 旨在用作备用会话管理,因此需要将 canChangeUser 设置为 true 以让用户注销(并使用不同的方式重新登录)。我将更改我的答案的措辞,使其不太针对我的具体情况。
    • 这听起来像一个可变的会话提供者(我猜文档对不变性的概念不是很清楚)。如果您没有其他理由阻止它执行 API 请求(因为 Web 界面本身会为许多事情调用 API,例如 watch/unwatch,我无法想象它工作得很好),您可以确保它返回的 SessionInfo 的优先级总是低于 BotPasswordSessionProvider 返回的优先级。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多