У меня возник вопрос, касающийся безопасности использования API, так как, вероятно, я упускаю какую-то очевидную концепцию из-за недостатка опыта.
У меня реализована headless-версия Discourse для интеграции с моим фронтендом, и я успешно настроил SSO для аутентификации пользователей.
Изначально я понимал это так: я использую SSO для аутентификации как «activeUser», чтобы получать данные, специфичные для этого пользователя, через API. Теперь вижу, что это не совсем верно.
Я понял, что возвращаемые данные зависят от заголовка ‘api-username’. Но поскольку я использую администраторский API-ключ, я полагаю, что это означает возможность получения данных любого пользователя, просто указав правильное имя пользователя в параметре «api-username».
Таким образом, мой вопрос сводится к следующему: похоже, что в API отсутствует концепция «activeUser», и мне нужно вручную подстраивать активного пользователя, получая имя пользователя по external_id, а затем использовать его в качестве api-username на протяжении всей активной сессии. Правильно ли я понимаю?
Если моё понимание верно, не слишком ли легко хакеру просто изменить api-username в заголовке, чтобы получить доступ к чатам и обсуждениям любого пользователя?
Буду признателен за любую дополнительную информацию, которая поможет мне разобраться. Спасибо!
Никогда не используйте этот API из фронтенда, потому что в таком случае это действительно представляет риск (на самом деле риск гораздо выше, так как хакер может сделать что угодно).
Это нужно делать с бэкенда.
Если такой вариант невозможен, используйте ключи API пользователя.
Как реализация без серверной части, я буду запускать это со своей фронтенд-стороны. Поэтому в данном случае, похоже, мне нужно потратить время на изучение обсуждения по этой теме:
Аналогично этим обсуждениям, я был бы заинтересован в автоматической генерации API-ключа пользователя с помощью моего доступа к административному API. Однако в моём сценарии я не хочу, чтобы пользователь перенаправлялся на новую страницу для «одобрения» моего приложения. Я либо хочу принудительно одобрить это с помощью своего надёжного административного API-ключа, либо существует ли настройка, которую я могу отключить, чтобы для генерируемого мной нового API-ключа пользователя не требовалась дополнительная аутентификация?