Как правильно защищать API
Написал я простенький Authorization server. Его функционал:
Выдать пару access+refresh токенов, если логин/пароль введены верно.
Получить refresh токен+id пользователя и, если refresh токен валидный, то выдать новую пару access+refresh токенов, инвалидировав старую сессию.
Получить токен из Authorization: заголовка(Bearer), проверить валиден ли он, если нет просто вернуть соответствующий код ответа+текст ошибки в теле ответа в формате json. Если вадиден, то передать запрос api.
Но встал вопрос:
А как собственно использовать пункт 3, если сервер авторизации находится на отдельном сервере(простите за тавтологию).
Я могу придумать разве что:
Клиент делает запрос к api. Внутри этого запроса передает Authorization.
Перед тем как выполнить запрос, API сервер сперва делает свой запрос на сервер авторизации, для проверки, переданного в Authorization, токена и, если сервер авторизации отвечает 200 кодом(или что то такое), то выполняется запрошенный endpoint. Если же сервер авторизации отвечает что токен невалиден, то клиенту возращается 401 код и доступ к api не предоставляется.
Это выглядит здраво, но как минимум один доп запрос прибавляется к запросу пользователя. Разве это норм?
Второй вариант:
Переместить вадидацию access токена на api сервер, а создание и рефрешинг токенов оставить на сервере авторизации и вадидацию реализовать в виде мидлвари на апи сервере. Получается лишних сетевых запросов не будет.
Как обычно это делается?