Как создать закрытый api, доступ к которому может получить только клиент?


Я уже некоторое время просматриваю веб, но не могу понять концепцию создания частного API только между front-end и back-end. то, что я по существу хочу сделать, - это иметь API, который доступен только через интерфейс, а не через curl, postman или что-то еще.

У меня есть следующая настройка:

  1. Приложение размещено на Heroku, серверная часть находится в nodejs

  2. Я использую https-соединение, которое я сам сгенерировал через let's encrypt инструмент.

  3. У меня есть открытый API atm, который возвращает строку "Hello world"

  4. В настоящее время вы можете получить к нему доступ либо через front-end, либо перейдя на www.example.com/api/test но то, что я хотел бы сделать, это не позволить пользователю вручную посетить ссылку или использовать curl или postman, чтобы получить это, но вместо этого только сделать его доступным через интерфейс.

  5. Передний конец записан в угловой 2 (если это вообще имеет значение)

Обратите внимание, что я не планирую чтобы любой пользователь мог войти на сайт, я просто хочу ограничить доступ к API внешним миром, чтобы только мой клиент мог получить его.

ОБНОВИТЬ ПРЕЦЕДЕНТ

Случай использования в будущем прост. У меня есть базовая форма регистрации, которая запрашивает адрес электронной почты и текстовое описание. Затем я использую nodemailer на бэкэнде, чтобы отправить эту информацию в gmail с помощью POST-запроса от Angular 2. Я получаю доступ к данным, отправленным через req.on ('данные') и req.on ('конец') и process оно. Мой страх заключается в том, как я могу быть уверен, что я не буду получать спам через этот API и получать 10k писем, следовательно, мое желание каким-то образом сделать API доступным только через интерфейс.

1 2

1 ответ:

Хотя вы не можете предотвратить вызов службы REST всем интернетом, вы все же можете предотвратить спам : Ваш сервис требует аутентификации или нет, это всегда один и тот же механизм, использующий капчу ( самую важную часть ) и ограничение скорости вашего API.

1. Капча:

Лучший способ убедиться, что клиент, отправляющий запрос на сервер, управляется человеком,-это капча.

Капча :

Капча (backronym для "Полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей")-это тип теста "вызов-ответ", используемый в вычислительной технике для определения того, является ли пользователь человеком.

Вы можете найти множество сервисов или библиотек, которые будут создавать captchas, например, Google reCAPTCHA.

2. ограничение скорости:

  • Для публичной службы вы можете ограничить скорость доступа по IP : если один и тот же IP делает 10, 100 или даже 1000 запросов (в зависимости от цель этой службы), это немного подозрительно, поэтому вы можете отказаться от его обслуживания, отправив статус ошибки и записав это несправедливое поведение в журналы приложений. Таким образом, системный администратор может запретить IP на уровне брандмауэра с помощью такого инструмента, как fail2ban.

  • Для аутентифицированной службы, Ну, это то же самое, за исключением того, что вы можете также захотеть ограничить скорость API на основе IP и на его идентичности, и, возможно, не захотите запретить аутентифицированную службу. пользователь...

Обратите внимание, что вы на самом деле не должны обрабатывать ограничение скорости самостоятельно для публичного API, что означает, что предотвращение одного и того же IP-адреса для выполнения 1000 POST-запросов к одному и тому же url-адресу за 10 секунд-это то, что может и должно быть сделано системным администратором.