@belyaevcyrill

Есть ли смысл подписывать REST API запросы?

Есть ли смысл каждый запрос к REST API сервера подписывать на клиентской стороне специальным токеном доступа (access_token)?

Этот токен доступа отсылается клиенту как только он успешно логинится на сервере.

Может обойтись просто кукисами? Когда я авторизуюсь через браузер, то у меня сохраняются кука пользовательской сессии. Может быть просто проверять при каждом клиентском запросе наличие кук пользовательской сессии?

UPD:
Схема примерно такая:

1. Клиент логинится на сервере:
Сервер <———(/login)——— Клиент

2. Сервер открывает пользовательскую сессию и отдаёт клиенту куку:
Сервер ———(cookie)———> Клиент

3. Клиент делает запрос к REST API сервера, помещая в заголовок запроса ИД куки
Сервер <———(REST API + headers с ИД куки)——— Клиент

4. Сервер смотрит куку у клиента:
Сервер ~~~~~~~(Где кука??)~~~~~~> Клиент

5. Клиент показывает куку в ответ:
Сервер <~~~~~~~(Вот она: ...)~~~~~~ Клиент

6. Сервер сверяет куку клиента с ИД куки, переданной в REST API запросе. А потом сверяет ИД куки с ИД пользовательской сессии. Если обе проверки прошли, то следующий шаг.

7. Сервер выполняет REST API запрос и отдаёт результат:
Сервер ~~~~~~~(Забирай данные ^_^ )~~~~~~> Клиент

Заранее спасибо.
  • Вопрос задан
  • 1309 просмотров
Решения вопроса 2
@vintage
Кука - это тоже access_token, только подставляемый браузером автоматически, даже если запрос инициирует не ваша страница, а страница левого сайта. Соответственно, при пробрасывании токена через куки, сторонний сайт сможет делать запросы к вашему, от имени пользователя. Нужно ли такое разрешать - вы решаете сами. Если нужно - просто используйте куки. Если не нужно, то самое простое - с запросом посылать взятый из куки токен в хедере, а на сервере сверять их идентичность. Получить куки скриптом можно лишь с того же сайта, кто их поставил. В урле токен лучше не посылать, чтобы он не светился в логах.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Сервер создаёт (генерирует случайно) при регистрации пользователя REST-token и затем, постоянно хранит в своей базе данных связку REST-token'а с клиентом (1-к-1): clientID => REST-token
2. REST-token - сервер передаёт клиенту через E-MAIL или SMS сразу после регистрации и просит ввести выданный код в поле, находящееся внутри запущенного приложения.
Или же, активировать переходом по ссылке, если это - web-приложение в браузере, открываемое по линку (а не stand-alone, запускаемое с ярлыка мобильного интерфейса).
3. Клиент подписывает каждый запрос к серверу этим токеном.

REST-token - клиент никогда не передаёт!

4. Сервер при поступлении запроса от клиента - подписывает все данные запроса токеном того же клиента на своей стороне.
5. Сервер сразу же сверяет: если подписи совпадают - запрос принимается к исполнению.

Для предотвращения подбора ключа REST-token - вводится случайно-генерируемая переменная в перечень полезных параметров при запросах к API: r,rand,random и т.д.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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