С обновлениями к MediaWiki 1.27 были внесены некоторые изменения в аутентификацию для созданного API (чтобы наряду с изменениями аутентификации для механизма Wiki). Как часть этого, я, кажется, сталкиваюсь с ошибкой разрешений в вики, которая настроена так, чтобы не разрешать чтение анонимными пользователями.Пользователи MediaWiki bot читают права?
wiki имеет $wgGroupPermissions['*']['read'] = false;
, чтобы отключить доступ для анонимных пользователей.
Но использование бота, созданного на новой странице Special:BotPasswords
, похоже, имеет проблему. Я создал бота для существующего пользователя admin
, который предоставляет базовым правам доступ к новому боту в качестве базовой линии (и «Основные права» включают в себя read
и writeapi
).
Используя API, я могу успешно получить токен входа и войти в систему (который возвращает cookie для установки сеанса), но затем с помощью этого сеансового файла попытаться выполнить запрос страницы (например, список allpages
) приводит к a readapidenied
(«Вам необходимо разрешение на чтение для использования этого модуля»).
Является ли readapi
новым разрешением, которое я должен предоставить? Или просто показывается, что cookie сеанса недостаточно, чтобы связать запрос списка страниц с запросом на вход (как я могу передать разрешение с на другие вызовы?)? Или это просто ошибка в новой пользовательской инфраструктуре Bot?
Я предполагаю, что мою ошибку в проведении информации о сеансе к запросу списка, так как если я временно поставил $wgGroupPermissions['*']['read']
обратно true
, и используйте параметр assert=user
запроса, он возвращается с assertuserfailed
ошибкой, указывая пользователь . не вошли в
'ImmutableSessionProviderWithCookie :: newSessionInfo' всегда возвращает null, и, в общем, для непреложного провайдера было бы странно не делать этого, поскольку вся цель непреложности заключается в том, что поставщик не контролирует, какие учетные данные используются для аутентификации сессия. – Tgr
Правда, 'ImmutableSessionProviderWithCookie' по умолчанию использует логику' SessionProvider :: newSessionInfo', которая возвращает значение null, потому что 'ImmutableSessionProviderWithCookie :: canChangeUser' является' false'. Но в моем случае пользовательский провайдер сеансов предназначен для работы в качестве альтернативного управления сеансом, поэтому для 'canChangeUser' установлено значение' true', чтобы позволить пользователю выйти из системы (и снова войти в систему, используя другое средство). Я изменю формулировку своего ответа, чтобы быть менее конкретным для моего конкретного случая. – MidnightLightning
Это звучит как изменяемый провайдер сеансов (я думаю, что документация не очень понятна в концепции неизменяемости). Если у вас нет других причин запретить ему выполнять запросы API (поскольку сам веб-интерфейс вызывает API для многих вещей, например watch/unwatch, я не могу представить, что это хорошо работает), вы можете просто убедиться, что Возвращаемое значение SessionInfo всегда имеет более низкий приоритет, чем тот, который возвращается BotPasswordSessionProvider. – Tgr