Как защитить API сервиса от поддельных запросов?

Итак, у нас имеется:

  • API
  • Клиентское приложение (VK Mini App), которое ни что иное, как удобный для пользователя интерфейс, реализующий функциональность API


У нас есть пользователь, у которого есть user_id.
У API есть метод someAction.perform, который взаимодействует с базой данных и что-то там меняет. Мне нужно каким-либо образом проверять, что этот запрос отправил именно этот пользователь, именно через клиентское приложение, а не какой-то злодей, отправляющий запросы curl'oм и подставляющий чужой user_id. Также хочу подчеркнуть, что работаю через VK, по этому у моих пользователей нет паролей или логинов в моем сервисе, и что клиентское приложение легко поддается реверс-инжинирингу.
  • Вопрос задан
  • 993 просмотра
Решения вопроса 1
Читать документацию по VK Mini Apps, раздел Подпись параметров запуска. Там же ссылки на примеры реализцию проверки подписи.

Пользователь приходит с кучей параметров, в числе которых user_id и подпись запроса sign, которую надо у себя на сервере проверять. Она завязана на «секрет» приложения.
Так можно убедиться, что пришёл именно тот пользователь и параметры не подделаны.

Далее эти же параметры можно передавать и с каждым API-запросом, а в обработчике снова проверять их.

Либо, чуть сложнее, генерить временный уникальный ключ, хранить у себя в БД/Redis, и его передавать в заголовках всех API запросов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@ghostiam
На Go писатель, серверов пинатель.
Это практически не реально.
Если приложение может составить и послать запрос, то и злоумышленник это сможет.
Тем более, в данном случае вы не контролируете API.

Если бы у вас было собственное API которое вы могли бы редактировать, то отличить реально приложение от подделки можно по запросам, например, приложение всегда запрашивает ендпоинты в порядке url1, url2, url3, а злоумышленник может отправлять запрос сразу на url3 (но инстаграму это не помогло и их апи взломано).
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Надо связать юзера и секретный ключ подписи запросов, используя ответчик стороннего сервиса.

Проверьте: можно ли по кольцу передавать данные: ваш сервис -> приложение -> vkAPI -> и.. отбивка vk на ваш сервис, минуя клиента?

Если это возможно - вы можете подписывать свои запросы и проверять подпись по отбивке/ответчику vk для конкретного пользователя (секретный ключ - знаете только Вы, а пользователя - только VK).

Иначе - никак.
Ответ написан
HemulGM
@HemulGM
Delphi Developer, сис. админ
Аутентификация? Токены?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы