Использование Keycloak и Angular в мультитенантных конфигурациях

Продолжая мою первоначальную статью о реализации Keycloak и AngularJS с использованием RouterUI, в этой статье мы выводим ее на новый уровень с поддержкой действительно мультитенантного приложения.

Соображения

Keycloak логически разделяет мультитенантные приложения на области; имеется в виду отдельная конфигурация, пользователи, аутентификация, все для каждой области. Мы можем использовать конфигурацию области для разделения доступа каждого клиента и ограничения запросов к службе аутентификации в зависимости от клиента.

В результате у каждого клиента будет своя собственная страница входа. Типичный для большинства корпоративных шлюзов входа, если пользователь не знает область, в которой он хочет войти, ему не будет предоставлен доступ к приложению.

Это поднимает проблему с динамической маршрутизацией AngularJS и подходом к обработке определенных состояний, основанным на контроллерах. В этом случае нам нужно решить вопрос о начале фазы перед контроллером конфигурации аутентификации.

Маршрутный тест

Это подводит нас к первому важному вопросу: тестеру маршрута. Вот как мы определяем, какую конфигурацию нужно указать Keycloak для загрузки.

Тестер маршрута требуется для запуска перед загрузкой приложения. Используя $ urlService, мы проверяем, соответствует ли URL одному из наших предварительно сконфигурированных путей к области. Если строка проверяет истину, мы загружаем область keycloak, используя найденный ключ.

Динамическая конфигурация

Это удобно, потому что позволяет настраивать неограниченное количество страниц входа на удаленном сервере keycloak и всего несколько строк настройки здесь, в AngularJS.

LocalStorage

Я использовал локальное хранилище для сохранения области, поскольку вероятность того, что кто-то меняет области, чрезвычайно мала. Это также позволяет кому-то изменять области, просто меняя URL-адрес.

Хорошая вещь в этой настройке: мы также можем протестировать существующий сеанс в указанной области.

Если логин не удался, мы обращаемся к странице авторизации keycloak конкретной области.

Несанкционированное перенаправление

Если у пользователя нет области в локальном хранилище и он не прошел тест регулярного выражения для входа в наше приложение, мы перенаправляем на общую страницу.

Серверный динамический JWKS

Эта серия будет продолжена кодом на стороне сервера, который объясняет, как оценивать запросы, которые могут исходить из нескольких доменов keycloak. При этом сохраняя спецификацию JWKS