Перейти к основному содержанию
Перед установкой ИБП Мастер необходимо развернуть хотя бы один инстанс KeyCloak. Даный сервис обеспечивает авторизацию в системе.

Предпосылки

Пример конфигурации nginx для установки KeyCloak (конфигурация по пути /etc/nginx/sites-enabled/):
upstream keycloak {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    server_name kc.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name kc.example.com;
    add_header X-Frame-Options SAMEORIGIN;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options nosniff;
    add_header Cache-Control "private";
    add_header Access-Control-Allow-Origin https://kc.example.com;
    add_header Access-Control-Allow-Methods "GET, OPTIONS, POST";
    add_header Access-Control-Allow-Headers "Content-Type";
    add_header Access-Control-Max-Age 86400;
    ssl on;
    ssl_certificate /path/to/cert/fullchain.pem;
    ssl_certificate_key /path/to/cert/privkey.pem;

    location / {
        proxy_pass http://keycloak;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_pass_request_headers on;
    }
}
После применения настроек необходимо перезапустить nginx.

Установка KeyCloak

После выполнения предпосылок выполнить команду:
docker run \
	-p 8080:8080 \
	-e KEYCLOAK_ADMIN=admin \
	-e KEYCLOAK_ADMIN_PASSWORD=admin \
	quay.io/keycloak/keycloak:latest \
	start \
	--http-relative-path=/ \
	--proxy=edge
После успешного запуска Keycloak будет доступен по адресу: https://yourdomain.com.

Настройка KeyCloak

Создание реалма (Realm)

  1. Вход в административную консоль:
    • Откройте браузер и перейдите по адресу https://yourdomain.com
    • Нажмите на Administration Console
    • Введите логин admin и пароль admin (которые вы указали в переменных окружения)
  2. Создание нового Realm:
    • В левом верхнем углу наведите курсор на текущий realm (по умолчанию Master) и нажмите Create Realm
    • В поле Name введите название нового realm (например, ibpmaster)
    • Нажмите кнопку Create

Создание клиента (Client)

  • Переход в раздел Clients:
    • В левом меню выберите Clients
    • Нажмите кнопку Create
  • Настройка нового Client:
    • В поле Client Type выберите OpenID Connect
    • В поле Client ID введите идентификатор клиента (например, ibpmaster)
    • Нажмите Next
    • Поле Client authentication пометить как Off
    • В поле Authentication flow выбрать опции Standard Flow и Direct Access Grants
    • Нажмите Next
    • Поля Root URL, Home URL оставить пустыми
    • Поля Valid redirect URIs, Valid post logout redirect URIs, Web origins заполнить * (или конкретными адресами, если необходимо).

Создание пользователя

  • Перейти в раздел Users и нажать на Add User
  • Ввести почту основного администратора и включить Email verified
  • Заполнить поля First name и Last name
  • Нажать Create
  • Зайти в пользователя, перейти на вкладку Credentials
  • Нажать Set Password и установить пароль для пользователя

Получение секретного ключа клиента

  • Перейти в меню в Clients и выбрать ранее созданного клиента
  • Перейти в раздел Credentials и скопировать Client secret

Получение публичного ключа

  • Перейти в меню в Realm Settings
  • Перейти в раздел Keys
  • Для ключа RS256 скопировать Public Key

Обновление файла конфигурации .env

# --- Keycloak's settings ---
KEYCLOAK_SERVER_URL = <URL KeyCloak> # https://yourdomain.com
KEYCLOAK_REALM_NAME = <Идентификатор KeyCloak Realm> # см. Создание реалма
KEYCLOAK_CLIENT_ID = <Идентификатор KeyCloak Client> # см. Создание клиента
KEYCLOAK_CLIENT_SECRET_KEY = <KeyCloak Secret> # см. Получение секретного ключа
KEYCLOAK_PUBLIC_KEY = <KeyCloak Public Key> # см. Получение публичного ключа