Keycloak
Текст может содержать неточности, устаревшие данные или технические ошибки. Пожалуйста, проверяйте критически важную информацию перед использованием.
Architeezy аутентифицирует пользователей через Keycloak. Встроенный контейнер
keycloak содержит описание realm architeezy и провайдер русской локализации.
Импорт realm
Realm появляется при первом запуске, пока база данных keycloak ещё пуста.
Дальше Keycloak его не перезаписывает, поэтому ваши правки в консоли
администратора сохранятся и при перезапуске, и при пересборке образа.
На том же первом запуске Keycloak забирает из окружения две настройки клиента:
допустимый URI перенаправления API_GATEWAY_URL/login/oauth2/code/keycloak и
URI перенаправления после выхода APPLICATION_URL. Подставляются они один раз,
поэтому изменение APPLICATION_URL или API_GATEWAY_URL позже на них не влияет
— правьте настройки клиента в консоли администратора.
Доступ к консоли администратора
Откройте адрес из KEYCLOAK_URL — в стандартной конфигурации это
http://localhost:8181. Войдите с помощью KEYCLOAK_ADMIN_USERNAME и
KEYCLOAK_ADMIN_PASSWORD. Эта учётная запись принадлежит realm master и
администрирует сервер; пользователем Architeezy она не является.
Чтобы перейти к realm приложения, выберите Manage realms, затем Architeezy.
Настройки realm
Импортированный realm настроен так:
- Отображаемое имя — Architeezy; входить можно и по имени пользователя, и по адресу электронной почты.
- Самостоятельная регистрация и сброс пароля отключены — учётные записи создаёт администратор. Включить их можно в разделе Realm settings → Login.
- Интернационализация включена: локали
enиru, по умолчаниюen. - Время простоя SSO-сессии — 30 дней, время жизни access-токена — 5 минут. Время
простоя сессии должно совпадать с переменной
SESSION_TIMEOUTAPI-шлюза: меняя одно, меняйте и другое. - SSL требуется для внешних запросов.
Клиенты
Кроме встроенных клиентов Keycloak (account, account-console, admin-cli,
broker, realm-management, security-admin-console) realm содержит двух
клиентов приложения.
architeezy
Конфиденциальный клиент, под которым входит API-шлюз. Использует стандартный поток authorization code.
- Valid redirect URIs должны содержать
API_GATEWAY_URL/login/oauth2/code/keycloak. - Valid post logout redirect URIs должны содержать
APPLICATION_URL. - Секрет на вкладке Credentials должен совпадать со значением, заданным в
OAUTH2_CLIENT_SECRET.
Чтобы сменить секрет: откройте Clients → architeezy → Credentials, нажмите
Regenerate, скопируйте новое значение в .env и перезапустите API-шлюз.
architeezy-api
Публичный клиент для инструментов, которые обращаются к API от имени
пользователя, — настольного приложения или скрипта. Его URI перенаправления
http://localhost:* и http://127.0.0.1:* нужны локальному обработчику
обратного вызова. Идентификатор этого клиента приложение читает из
OAUTH2_API_CLIENT_ID.
Роли
Realm содержит стандартные роли Keycloak — default-roles-architeezy,
offline_access и uma_authorization — плюс роли realm-management, дающие
права на администрирование самого realm. Выдайте учётной записи
realm-management realm-admin — она сможет управлять пользователями, и пароль
администратора realm master передавать не придётся.
Права внутри Architeezy с ролями realm не связаны. Все учётные записи, которым разрешён вход, начинают с одинаковыми правами; дальше доступ выдают владельцы — отдельно на каждый проект и каждое пространство моделирования.
Использование существующего Keycloak
Если у вас уже есть Keycloak, направьте Architeezy на него, а встроенный контейнер не поднимайте:
- В своём Keycloak выберите Manage realms → Create realm, с помощью
Browse выберите файл
architeezy.jsonи создайте realm. Как вариант, создайте realm вручную и добавьте конфиденциального и публичного клиента с описанными выше URI перенаправления. - Откройте Clients → architeezy → Credentials и скопируйте секрет.
- Заполните переменные
OAUTH2_*. АдресаOAUTH2_ISSUER_URL,OAUTH2_AUTHORIZATION_URLиOAUTH2_ACCOUNT_URLоткрывает браузер, поэтому они должны быть публичными. АдресаOAUTH2_TOKEN_URL,OAUTH2_JWK_SET_URLиOAUTH2_USER_INFO_URLвызывает само приложение, и они могут быть внутренними. - Удалите сервисы
keycloakиkeycloak-dbиз compose-файла и уберите их из списковdepends_onуbackendиapi-gateway.
Точно так же подойдёт любой провайдер OAuth 2.0, который выдаёт JWT
access-токены: в токене нужны утверждение sub с UUID и утверждение
preferred_username.
Настройка обратного прокси
Встроенный контейнер рассчитан на прокси, который терминирует TLS: он читает
заголовки X-Forwarded-* и берёт публичное имя хоста из KEYCLOAK_URL.
Выделите Keycloak отдельное имя хоста, например auth.example.com, и
передавайте заголовки, перечисленные в конфигурации прокси на странице о готовых
образах. Без этих заголовков Keycloak построит адреса перенаправления и издателя
из внутреннего адреса, и вход не сработает.