Как оценить архитектуру выделенного сервиса аутентификации в микросервисах и есть ли альтернативы
Что проверяют
Умеете ли вы оценивать решение по критериям, а не по моде: где точка отказа, какая задержка добавляется к запросу, как отзываются доступы. Следом обычно спрашивают, где проверять токен, в шлюзе или в каждом сервисе, и как сервисы аутентифицируют друг друга.
Как отвечать
Критерии оценки выделенного сервиса:
- участие в каждом запросе: если сервисы ходят в него проверять токен (introspection), он становится узким местом и единой точкой отказа. Лучше JWT, которые сервис проверяет локально по публичным ключам из JWKS, с ротацией ключей через
kid; - отзыв доступа: JWT не отозвать до истечения, поэтому access-токен живёт минуты, а refresh-токен ротируется при каждом обновлении. Для мгновенной блокировки нужен список отозванных токенов;
- стандарты: OAuth 2.0 и OpenID Connect, authorization code с PKCE, без implicit и password grant. Свою выдачу токенов не пишут: есть Keycloak и Spring Authorization Server;
- сторона сервисов: в Spring Boot это resource server,
spring-boot-starter-oauth2-resource-serverи свойствоspring.security.oauth2.resourceserver.jwt.issuer-uri, ключи подтягиваются сами; - границы: аутентификацию централизуют, а доменную авторизацию (может ли пользователь править этот заказ) оставляют в сервисе.
Альтернативы:
- проверка в API-шлюзе: Spring Cloud Gateway валидирует токен и передаёт его дальше. Внутренним сервисам всё равно стоит проверять токен самим;
- service mesh: Istio даёт mTLS между сервисами и проверку JWT в sidecar;
- внешний провайдер: облачный IdP, если нет требования держать учётные данные у себя;
- межсервисные вызовы: client credentials flow или mTLS вместо проброса пользовательского токена.
Где спотыкаются
Ставят сервис аутентификации в синхронный путь каждого запроса без кеша. Он падает, и вместе с ним лежит вся система.
Доверяют заголовку X-User-Id от шлюза без изоляции сети. Любой, кто достучался до сервиса напрямую, подставит чужой идентификатор.
Выдают JWT на сутки и кладут в него все права. Отозвать их нельзя, токен раздувается, а смена роли вступает в силу только завтра.