> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/organizaciya-dostupov/spravochnaya-informaciya/keycloak.md).

# Keycloak

Keycloak — это система управления идентификацией и доступом с открытым исходным кодом, которая упрощает аутентификацию, авторизацию и управление пользователями в приложениях. Она поддерживает стандарты OAuth2, OpenID Connect и SAML, обеспечивая единый вход (SSO), многофакторную аутентификацию (MFA) и гибкую настройку политик безопасности.

### Возможности Keycloak

* **Централизованное управление пользователями, ролями и группами**. Позволяет создавать изолированные области (realms) для разных проектов или организаций.
* **Поддержка протоколов**. Интеграция с приложениями через OAuth2, OpenID Connect и SAML.
* **Многофакторная аутентификация**. Включает OTP, аутентификационные приложения (например, Google Authenticator), SMS-коды (требует интеграции с провайдерами).
* **Интеграция с внешними системами**. Подключение к LDAP, Active Directory, социальным сетям (Google, GitHub и др.).
* **Аудит и логирование**. Запись событий аутентификации и административных действий.&#x20;
* **Кастомизация**. Возможность разработки собственных провайдеров и адаптеров для разных платформ.

### Установка и развёртывание в Kubernetes

Для развёртывания Keycloak в Kubernetes можно использовать Helm-чарты или вручную создать Deployment и Service. Пример с использованием Helm:

1. Добавьте репозиторий Keycloak:

   ```bash
   bashhelm repo add bitnami https://charts.bitnami.com/bitnamihelm repo update
   ```
2. Создайте файл значений (например, `helm-value.yaml`):

   ```yaml
   yamlauth:  adminUser: "admin"  adminPassword: "password123"persistence:  enabled: true  size: "8Gi"
   ```
3. Установите Keycloak:

   ```bash
   bashhelm install keycloak -f helm-value.yaml bitnami/keycloak --namespace microservices
   ```
4. Настройте Ingress для доступа к интерфейсу Keycloak.&#x20;

Альтернативный способ — использовать готовые YAML-файлы из репозитория Keycloak:

```bash
bashkubectl create -f https://raw.githubusercontent.com/keycloak/keycloak-quickstarts/latest/kubernetes-examples/keycloak.yaml -n keycloak
```

### Как пользоваться Keycloak

После развёртывания выполните следующие шаги:

1. **Доступ к админ-консоли**. По умолчанию используется логин `admin` и пароль `admin`. Рекомендуется изменить пароль в производственной среде.&#x20;
2. **Создание realm**. Realm — это изолированное пространство для управления пользователями и приложениями. В нём можно настроить политики безопасности, темы оформления и другие параметры.&#x20;
3. **Добавление пользователей и ролей**. В админ-консоли можно создавать пользователей, назначать им роли и группы, а также настраивать атрибуты.
4. **Настройка клиентов**. Для каждого приложения (веб, мобильное, API) создаётся отдельный клиент с указанием протокола (OpenID Connect, OAuth2 и т.д.), URI перенаправления и других параметров.&#x20;
5. **Интеграция с приложениями**. Используйте адаптеры Keycloak для разных платформ (Java, Python, Node.js и др.) или реализуйте взаимодействие через REST API.&#x20;

### Интеграция с другими приложениями

Keycloak предоставляет адаптеры и библиотеки для интеграции с различными платформами. Примеры:

* **Spring Boot**. Используйте Spring Security и OAuth2-клиент для аутентификации через Keycloak. Настройте параметры клиента (client ID, secret, issuer URI) в конфигурации приложения.
* **Next.js**. Интегрируйте Keycloak с помощью NextAuth.js, указав параметры клиента и realm. Настройте перенаправление после аутентификации.&#x20;
* **Flask**. Используйте библиотеку `flask_oidc` для работы с OpenID Connect. Укажите URI Keycloak и клиентские данные в конфигурации приложения.&#x20;

Для нестандартных случаев можно реализовать взаимодействие через REST API Keycloak, получая токены и проверяя их валидность.&#x20;

### Рекомендации

* В производственной среде используйте внешнюю базу данных (например, PostgreSQL) вместо встроенной H2.&#x20;
* Настройте SSL и безопасные пароли для административного доступа.&#x20;
* Для масштабируемости рассмотрите кластеризацию Keycloak в Kubernetes.&#x20;
* Используйте Helm-чарты для упрощения управления конфигурацией и обновлениями.&#x20;

Для детальной настройки и решения специфических задач обратитесь к официальной документации Keycloak и примерам из сообщества.
