Я только что заметил, что в отчетах по безопасности на панели управления с апреля этого года отображаются тысячи запросов к пользовательскому API в день.
Это очень странно и превышает мои ожидания в 100–1000 раз.
Как получить более подробные отчеты о том, какие ключи запрашивают пользователи, кто и сколько запросов делает, а также какие именно вызовы API используются? Если у ключа есть права на чтение/запись, я предполагаю, что кто-то может удалённо читать и записывать темы/сообщения. Не исключено ли, что это парсинг постов с удалённого сайта?
Также есть ли способ глобально аннулировать/истечь все пользовательские API-ключи?
Просто для уточнения: вы спрашиваете о запросах к пользовательскому API, а не о запросах, выполненных с использованием API-ключа, который вы сгенерировали для пользователей на странице «Администрирование / API» вашего сайта Discourse. Запросы к пользовательскому API выделены зеленым цветом на скриншоте ниже:
Это не отвечает на все ваши вопросы, но вы можете получить общее представление о том, как используются пользовательские API-ключи, с помощью следующего запроса Data Explorer:
SELECT * FROM user_api_keys
Чтобы получить список приложений, которые делают запросы к пользовательским API-ключам на ваш сайт, и количество пользователей, использующих каждое приложение:
SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name
Пользовательские API-ключи, используемые для подключения через приложение DiscourseHub, будут иметь поле application_name со значением «Discourse - unknown».
Если пользователь использует пользовательский API-ключ для взаимодействия с сайтом, в разделе «Безопасность» на странице его настроек появится запись о приложении:
Запись показывает права доступа (scopes), предоставленные приложению. Также вы можете отозвать доступ к приложению.
Я не вижу способа истечь или отозвать все пользовательские API-ключи через интерфейс Discourse. Есть только возможность отзывать ключи по одному на страницах настроек пользователей. Технически можно отозвать все пользовательские API-ключи через консоль Rails, но, вероятно, стоит сначала изучить, как эти ключи используются.
Похоже, что запросов от приложения DiscourseHub слишком много. Если на вашем сайте установлен модуль Data Explorer, мне было бы интересно увидеть результаты следующего запроса:
SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name
Я протестировал этот запрос на своём тестовом сайте, но там есть только один user_api_request от приложения DiscourseHub. Мне кажется, что запрос составлен правильно для обработки подключений нескольких пользователей к Discourse из разных приложений, но дайте знать, если что-то в результатах покажется странным.
Понадобилось время, чтобы установить Data Explorer, по какой-то причине моя сборка не удалась.
Вот что я вижу:
application_name
user_count
Discourse - xhanse's iPhone X
1
Discourse - iPhone
1
Discourse - xrett's iPhone
2
Discourse - xave's iPhone
1
Discourse - xixu's iPhone
1
Discourse - xevin's GS8
1
Я скрыл некоторые имена, похоже, это всего несколько пользователей. Возвращает ли запрос информацию за определённый период? Тысячи API-запросов для нескольких пользователей кажутся мне чрезмерными. Также у одного пользователя, кажется, два значения user_count. Это значит, что у него два ключа API (то есть два приложения)?
В этом случае возможны два варианта. Либо у пользователя два iPhone с одинаковым именем устройства, либо он в какой-то момент удалил приложение и установил его заново. В обоих случаях у него будет несколько API-ключей.
Нет, он возвращает сведения обо всех активных ключах API пользователей.
Попробуйте выполнить следующий запрос:
SELECT * FROM user_api_keys
Предполагаю, что он вернёт только 7 строк. Дайте знать, если это не так.
Не обязательно. Когда пользователи получают доступ к сайту через приложение DiscourseHub, их запросы к сайту учитываются как запросы к API пользователей. Если несколько пользователей активно просматривают сайт, они могут сгенерировать 2 тысячи запросов за день.
Мне всё это кажется разумным. Для контекста: сегодня я кратко зашёл на свой тестовый сайт через приложение DiscourseHub. На сайте практически нет контента. Я несколько минут просматривал его и сгенерировал 36 запросов к API пользователей. На сайте с большим объёмом контента, который нужно прокручивать, не будет удивительным, если один пользователь за день создаст множество запросов.
Если вы всё ещё обеспокоены этим, можно использовать плагин Data Explorer, чтобы изучить активность пользователей, чьи user_id были возвращены в этом запросе:
Любопытство взяло верх, и я проверил сайт, который я почти исключительно использую через приложение DiscourseHub. За последние 24 часа с этого сайта было сделано чуть меньше 1100 запросов к API ключу пользователя, и я единственный пользователь с активным ключом.