Задать вопрос
@Zubastik_1

Как защитить rest api?

Есть приложение номер 1, оно отдаёт json. Я хочу его защитить - чтобы данные отдавались только моему приложению номер 2. Приложение номер 2 это обычная html + js (vue.js). Какие есть варианты (если можно на пальцах).

Первое что пришло в голову - по логину и паролю которые будет запрашивать приложение номер 1 перед тем как отдать данные. Как я понимаю логин и пароль надо будет вписывать в аякс запрос во 2м приложении? Или я что то не так понимаю или... Ведь этот пароль можно будет легко увидеть в исходном коде? Какие есть варианты?
  • Вопрос задан
  • 257 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
angrySCV
@angrySCV
machine learning, programming, startuping
классический подход вместе с запросом отдавать данные которые однозначно идентифицируют пользователя (логин пароль с каждым запросом не передают, тк это потенциальная возможность подслушать эти данные, ну и проблема с производительностью, придется на каждый запрос сверяться с базой данных пользователей, что очень накладно)
обычно для идентификации пользователя сервис при входе создает специальный "ключ" (который пользователь хранит у себя и передает в сервис при каждом запросе).
раньше для этих целей активно использовали сессии, которые сервер хранил у себя в памяти и сверял введенные данные с этими сессиями - но там множество проблем с маштабируемость и производительность, поэтому сейчас активно используют так называемые "токены"
в таком токене зашифровано хранятся данные о пользователе, при получении токена сервер расшифровывает находящиеся там данных, ни с чем их у себя не сверяет и НЕ ХРАНИТ, в этих расшифрованных данных конкретно указывается есть ли у пользователя права доступа или нет.

токены эти могут передаваться на сервер в запросе в качестве параметра:
хттп://сайт.ру/данные.жсон?токен=ваш_токен

но такой способ считается плохим тк токены остаются в истории браузера например (ну и гет запросы обрезают длинну возможной ссылки)
наиболее подходящим способом считается передача токенов в заголовке запроса

подробнее о токенах советую посмотреть тут: https://jwt.io/introduction/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vs02
Ну по умолчанию, браузер не даст сделать ajax запрос с другого домена на ваш сервер, если сервер не отдает специальный заголовок, который разрешает кроссдоменные ajax запросы. То есть в самом простом случае можно ограничиться проверкой на сервере на предмет того что к вам пришел именно ajax запрос, это далеко не 100% защита, но он большинство нежелательных запросов ограничит. Еще csrf токены неплохой вариант
Ответ написан
Ваш ответ на вопрос

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

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