Comments 12
На мой взгляд должны быть веские причины, чтобы писать сервер авторизации с нуля вместо использования чего-нибудь вроде spring-security-oauth2-authorization-server
Я так понимаю у вас здесь токен заменяе сессию, поэтому тут jwt токен явно и не нужен.
Всем нравятся JWT, но мало кто умеет их готовить. :) В правильной реализации сервер авторизации только ВЫДАЕТ токены, не НЕ ПРОВЕРЯЕТ их. А проверяют их уже конечные серверы ресуросов без участия сервера авторизации. В этои и есть суть - что это РАСПРЕДЕЛЕННАЯ система.
Да тут еще и API Gateway своей разработки + передача полномочий в микросервисы в заголовках. То есть любой кто сможет отправить запрос мимо API Gateway получит возможность действовать в сервисах от имени любого пользователя с любыми полномочиями.
Ну такое себе...
С одной стороны да, а с другой это зависит от того, насколько защищенную систему вы хотите построить. Можно и TLS на все межсервисные вызовы навесить, например.
Если не особо нужна защищенность, то зачем было городить проверку каждого запроса через сервис авторизации? Достаточно было классики OAuth2 - выдать JWT токет подписанный и раздать с сервиса авторизации по всем клиентам ключи. Это бы еще и отказоустойчивости добавило и latency снизило.
Если у нас 100+ микросервис, насколько масштабируемо сервис permission учитывая что не все может быть на spring тем более на java? Какой best practice для permission? У каждого сервера своя бд с таблицей для проверки permission, либо как в примере request засетить изначально в api gateway?
Сильно зависит от вашего контекста.
Академически считается правильным, что сервис самостоятельно проверяет все гранты по запросу. А у API Gateway две ответственности: отделить авторизованную зону от неавторизованной, и иногда обогатить запрос приватной информацией, которую не хочется светить в jwt-токене. Конечно, это не аксиома, и при понимании что делаешь, можно от нее отклоняться.
По-моему очень спорное решение. С одной стороны да, у нас в таком кейсе имеется возможность управлять жизненным циклом токена (точнее прерывать его заблаговременно), можем достаточно гибко реагировать на изменения прав пользователей, чуть меньше заморачиваться насчет авторизации.
C другой мы имеем 2 точки отказа + оверхед на походы в auth сревис (можно обмазать кэшeм, но тогда нужно решать 2-ую самую сложную проблему программирования), gateway имеет несколько отвественностей.
ИМХО: такой подход несомненно имеет место быть, только у меня пока к нему всё же больше вопросов.
Сервер авторизации для микросервисов на Spring Boot