Как сделать секретный ключ API?

Исходные данные:
API доступно только зарегистрированным пользователям.
После регистрации юзеру выдаётся id и секретный ключ на основе хэша каких-то данных.
Юзер должен сохранить ключ в тайне и не сообщать его третьим лицам, т.к. при каждом запросе со счёта списывается денежка.

Вопрос: есть ли необходимость ограничивать метод отправки ключа (например не принимать GET-запросы а отдавать только при POST-запросах)?
Или же для безопасности ограничить домен с которого могут идти запросы (можно обойти)?
Или делать двухступенчатый API как в ВК когда запрос с открытым id идёт на один адрес, а ответ приходит на другой заранее заданный в системе и с этого второго адреса уже посылается секретный ключ?

Или на всё забить и сделать по простому а юзер пусть сам бдит свой ключ?
  • Вопрос задан
  • 1200 просмотров
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Сделайте ограничение по IP. С возможностью указать несколько сетей. Просто, стандартно, привычно.
Для прозрачности - давайте подробный лог, мол по вашему ключу было столько-то таких-то запросов с такого IP-адреса. По идее градации день-IP-запрошенное действие-количество запросов будет достаточно чтобы и лог не раздувать сверх меры и давать подробную статистику пользователю. Если токенов может быть несколько - то дополнительно по токену счётчик
Не забудьте дать пользователю кнопку "ааа, срочно инвалидируйте мой токен!"
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Imho программа минимум:
а) принудительно использовать https
b) передавать запрос в теле POST, а не в url.
c) не передавать секретный ключ, а передавать хеш от (данные запроса + секретный ключ).
Все остальное опционально по желанию.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы