Как правильно защищать API

Написал я простенький Authorization server. Его функционал:

  1. Выдать пару access+refresh токенов, если логин/пароль введены верно.

  2. Получить refresh токен+id пользователя и, если refresh токен валидный, то выдать новую пару access+refresh токенов, инвалидировав старую сессию.

  3. Получить токен из Authorization: заголовка(Bearer), проверить валиден ли он, если нет просто вернуть соответствующий код ответа+текст ошибки в теле ответа в формате json. Если вадиден, то передать запрос api.

Но встал вопрос:

А как собственно использовать пункт 3, если сервер авторизации находится на отдельном сервере(простите за тавтологию).

Я могу придумать разве что:

  1. Клиент делает запрос к api. Внутри этого запроса передает Authorization.

  2. Перед тем как выполнить запрос, API сервер сперва делает свой запрос на сервер авторизации, для проверки, переданного в Authorization, токена и, если сервер авторизации отвечает 200 кодом(или что то такое), то выполняется запрошенный endpoint. Если же сервер авторизации отвечает что токен невалиден, то клиенту возращается 401 код и доступ к api не предоставляется.

Это выглядит здраво, но как минимум один доп запрос прибавляется к запросу пользователя. Разве это норм?

Второй вариант:

Переместить вадидацию access токена на api сервер, а создание и рефрешинг токенов оставить на сервере авторизации и вадидацию реализовать в виде мидлвари на апи сервере. Получается лишних сетевых запросов не будет.

Как обычно это делается?


Ответы (0 шт):