API-ключи позволяют нам интегрировать Discourse с другими системами или автоматизировать различные действия. Однако большая сила влечет за собой большую ответственность. Если злоумышленник получит доступ к API-ключу, он сможет получить доступ к конфиденциальным данным или внести изменения на вашем сайте. Чтобы смягчить этот риск и добавить дополнительный уровень безопасности, теперь вы можете ограничивать возможности API-ключа с помощью областей доступа (scopes).
Области доступа (Scopes) и разрешаемые параметры
При создании нового API-ключа вы можете выбрать нужные области доступа. Если навести курсор на иконку , вы увидите краткое описание её назначения. Кнопка покажет вам URL-адреса, связанные с этой областью доступа.
Также вы можете указать, какие параметры принимаются. Для разделения нескольких значений используйте запятые.
Миграция существующих ключей
После добавления этой функции существующие ключи стали «глобальными». Чтобы перевести их на использование областей доступа, вам потребуется отозвать их и создать новые.
Добавление пользовательских областей доступа
Плагины могут добавлять собственные области доступа, вызывая метод add_api_key_scope:
resource — это символ, используемый для группировки связанных областей доступа, а action — хэш со следующими атрибутами:
actions: Список допустимых действий контроллера. Формат: controller_name#method_name.
methods: Список разрешенных HTTP-методов (например, %i[get]). Используйте это вместо actions, чтобы сопоставление выполнялось по HTTP-методу, а не по действию контроллера.
params: Список имен разрешенных параметров.
aliases: Хэш, содержащий альтернативные имена для разрешенных параметров.
Если вы хотите узнать, как определены базовые области доступа, см.:
При этом у ключа API есть права read и read_list для тем. Например, /top.json работает с тем же ключом. Эндпоинт работает, когда я использую «глобальный ключ».
Я хотел бы вставить ключ API в свой клиент для чтения списка категорий и тем, поэтому важно иметь ключ только для чтения!
К сожалению, мы включаем лишь несколько областей (scopes) по умолчанию из-за большого количества доступных конечных точек. Мы можем добавить новые в будущем, но пока вам придется расширять их в соответствии с вашими потребностями.
Если вы используете ключ API с ограниченным набором областей, вызов конечных точек, не включенных в выбранные вами области, не будет работать. Вы можете нажать кнопку , чтобы увидеть, какие URL-адреса принимаются.
Это работает только для публичных сайтов. Кроме того, вы не увидите такие элементы, как приватные категории, если не вошли в систему и не имеете достаточных разрешений.
Вы принимаете предложения по дополнительным областям доступа?
Одна вещь, которая меня заинтересовала бы при использовании API нашего сайта, — это возможность для другого сайта проверять, существует ли пользователь с указанным адресом электронной почты, и при необходимости добавлять его в группу. Я доверяю этому сайту (другой сайт в рамках нашей родительской организации), но, если есть такая возможность, кажется разумным ограничить варианты доступа только необходимыми.