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 не является частью нашего микросервиса и может быть заменен;
  • В микросервисах останется только чистая бизнес-логика.