23 июня 2022
Блог
Как работает аутентификация через Sidecar-контейнер
Мы уже рассказывали про организацию перехода с устаревшего Microsoft ADFS на Keycloak. Сегодня подробнее остановимся на том, как настроить аутентификацию в продукте с помощью интеграции с Keycloak и Sidecar-контейнера.
Задача интеграции с Keycloak не нова и стала регулярно возникать на наших проектах. Мы решили не писать очередные конфигурации для проектов на Java, а использовать архитектурный подход Service Mesh. В чем суть?
Разработчики разных команд часто сталкиваются с одними и теми же инфраструктурными задачами: трассировка и ретраи запросов, безопасность, балансировка. Все эти функции можно вынести за рамки микросервисов в выделенные сущности внутри подов – прокси-сервисы. Так появились Sidecar Containers, которые проксируют трафик внутрь микросервисов, выполняют перечисленные выше задачи и не только.
Sidecar Container – это один из шаблонов проектирования распределенных систем. Существует целый набор таких шаблонов, например, Ambassador, Adapter и др. Более подробно по теме можно прочитать в книге Брендана Бернса «Распределенные системы. Паттерны проектирования».
Все они позволяют отделить инфраструктурные вопросы от бизнес-логики решения. Для нас оптимальным оказался Sidecar-контейнер OAuth2-Proxy. При его использовании микросервису неважно, какой будет сервер аутентификации, интеграция с ним осталась ответственностью OAuth2-Proxy и его настроек. Они могут быть очень разными в зависимости от окружения.
Еще одна прелесть OAuth2-Proxy в том, что он поддерживает стандарт OpenID Connect, который применяется в большинстве современных серверов аутентификации. Это значит, что наше решение можно без изменений применять не только с Keycloak, но и, например, с WSO2 и другими сервисами. Это важно, поскольку нам не нужно будет искать новые решения для каждого продукта. Не может быть ситуации, чтобы у всех клиентов стоял одинаковый сервер.
Один из наших принципов разработки состоит в том, что микросервисы не должны содержать в себе инфраструктурную специфику. А значит аутентификация, взаимодействие микросервисов, работа по доступу к другим системам или базам данных нужно выносить за пределы микросервисов.
Использование таких паттернов как Sidecar позволяет нам использовать всю мощь Kubernetes и платформенного подхода в разработке. Решение на OAuth2-Proxy может быть переиспользовано для любого микросервиса, независимо от его бизнес-логики и даже независимо от технологии, на которой он разработан, будь то Java, C#, Node.js.
Преимущества нового подхода:
- Можно быстро и удобно внедрять в различные проекты инфраструктурный слой (и неважно какой язык программирования использовался при разработке);
- Основные инфраструктурные задачи готовы в виде отдельных решений;
- Sidecar Container не является частью нашего микросервиса и может быть заменен;
- В микросервисах останется только чистая бизнес-логика.