Как лучше сделать закрытое REST API?

Как лучше реализовать закрытый REST API? Отправлять при каждом запросе токен или просто через CORS? Или есть более элегантное решение?

Как вообще в будущем разделить API для всех и для себя? Например, какие-то методы оставить для себя и запретить ими пользоваться другим.
  • Вопрос задан
  • 4735 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
CORS не имеет ничего общего с API. Т.к. это - браузерная технология и используется для скриптов внутри браузеров.

Простой принцип разделения:
1. Для всех - список параметров без ключа.
2. Для себя - список параметров с неким ДИНАМИЧЕСКИМ ключом (токен подписи) и формулой его генерации, которая известна только Вам.

Теперь, защита от перехвата (лучше делать, даже если есть SSL):
1. На сервере храним формулу генерации подписи запроса на основе входных параметров запроса к API и временной метки.
2. При обращении к функциям "закрытого" API (для личных целей) Вы формируете подпись запроса, предварительно СИНХРОНИЗИРУЯ время с серверным, и затем, согласно формуле, отсылаете на сервер.
3. Сервер, зная формулу делает тоже самое и сверяет значения присланной и полученной (по той же формуле на стороне сервера) подписи: если они не совпадают ИЛИ просрочена ИЛИ это дубликат - сервер запрос к API отклоняет, иначе - запрос исполняется.
4. Сервер кэширует запрос на время погрешности синхронизации, чтобы предотвратить повторное использование идентичного запроса посредством MiTM-перехвата.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
al_gon
@al_gon
Ответ написан
Комментировать
rshaibakov
@rshaibakov
Web-разработчик
Вам нужно смотреть в сторону OAuth авторизации (не путать с аутентификацией).
CORS вряд ли вам поможет. Так как он дает привелегии для доменов, а не для пользователей.
Ответ написан
Комментировать
@Kostik_1993
Web Developer
Для этого используют middleware и JWT
Ответ написан
Комментировать
fdhadzh
@fdhadzh
Perfectionist with deadlines
Зависит от того, насколько это закрытое API.
Если рассчитано на использование внутри Вашей инфраструктуры, то используйте сертификаты для подписи, а если доступное из браузера или скажем приложения, то это API перестает быть закрытым, а становится попросту недокументированным.
Ответ написан
Ваш ответ на вопрос

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

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