Создать OIDC-приложение в Yandex Identity Hub для интеграции с Open WebUI
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
Open WebUI
Чтобы пользователи вашей организации могли аутентифицироваться в Open WebUI с помощью технологии единого входа по стандарту OpenID Connect, создайте OIDC-приложение в Yandex Identity Hub и настройте его на стороне Yandex Identity Hub и на стороне Open WebUI.
Управлять OIDC-приложениями может пользователь, которому назначена роль organization-manager.oauthApplications.admin или выше.
Примечание
Для демонстрации интеграции в этом руководстве вы развернете экземпляр Open WebUI на виртуальной машине Yandex Compute Cloud.
Чтобы предоставить пользователям вашей организации доступ в Open WebUI:
- Подготовьте облако к работе.
- Создайте и настройте OIDC-приложение.
- Разверните экземпляр Open WebUI.
- Настройте интеграцию на стороне Open WebUI.
- Добавьте пользователя.
- Убедитесь в корректной работе приложения.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Подготовьте окружение
-
Создайте облачную сеть с подсетью в зоне доступности, в которой вы будете развертывать экземпляр Open WebUI.
-
Зарезервируйте статический публичный IP-адрес в зоне доступности, в которой вы будете развертывать экземпляр Open WebUI.
-
В вашей облачной сети создайте группу безопасности, разрешающую следующий трафик:
Направление
трафикаДиапазон портов Протокол Источник /
НазначениеIPv4 CIDR Описание Входящий 80TCPДиапазон адресов0.0.0.0/0httpВходящий 8080TCPДиапазон адресов0.0.0.0/08080Входящий 443TCPДиапазон адресов0.0.0.0/0httpsВходящий 22TCPДиапазон адресов0.0.0.0/0sshИсходящий ВесьЛюбойДиапазон адресов0.0.0.0/0any -
Создайте виртуальную машину из публичного образа Ubuntu 24.04 LTS.
Примечание
При создании виртуальной машины выберите зону доступности, в которой создана ваша подсеть, используйте зарезервированный ранее публичный IP-адрес и созданную группу безопасности.
Рекомендуется использовать конфигурацию ВМ с 8 ГБ RAM и более.
Необходимые платные ресурсы
В стоимость поддержки создаваемой в руководстве инфраструктуры входят:
- плата за постоянно запущенную виртуальную машину (тарифы Yandex Compute Cloud);
- плата за использование статического публичного IP-адреса (тарифы Yandex Virtual Private Cloud).
Создайте приложение
- Перейдите в сервис Yandex Identity Hub
. - На панели слева выберите
Приложения. - В правом верхнем углу страницы нажмите
Создать приложение и в открывшемся окне:-
Выберите метод единого входа OIDC (OpenID Connect).
-
В поле Тип приложения выберите тип Web Application.
OIDC-приложения типа
Web Applicationоптимально подходят для аутентификации пользователей во внешних веб-приложениях, имеющих серверную часть (бэкенд), в которой может безопасно храниться секрет приложения. Подробнее о типах OIDC-приложений читайте в разделе Типы OIDC-приложений в Yandex Identity Hub. -
В поле Имя задайте имя создаваемого приложения:
open-webui-oidc-app. -
В поле Каталог выберите каталог, в котором будет создан OAuth-клиент для приложения.
-
(Опционально) В поле Описание задайте описание приложения.
-
(Опционально) Добавьте метки:
- Нажмите Добавить метку.
- Введите метку в формате
ключ: значение. - Нажмите Enter.
-
Нажмите Создать приложение.
-
Получите учетные данные приложения
-
Войдите в сервис Yandex Identity Hub
. -
На панели слева выберите
Приложения и выберите нужное OIDC-приложение. -
На вкладке Обзор в блоке Конфигурация поставщика удостоверений (IdP) скопируйте значения параметров, которые потребуется задать на стороне Open WebUI:
ClientID— уникальный идентификатор приложения.OpenID Configuration— URL с конфигурацией всех необходимых для настройки интеграции параметров.
-
Создайте секрет приложения (действие доступно только для приложений типа
Web Application).Для этого в блоке Секреты приложения нажмите кнопку Добавить секрет и в открывшемся окне:
-
(Опционально) Добавьте произвольное описание создаваемого секрета.
-
Нажмите Создать.
В окне отобразится сгенерированный секрет приложения. Сохраните полученное значение.
Важно
После обновления или закрытия страницы с информацией о приложении посмотреть секрет будет невозможно.
Если вы закрыли или обновили страницу, не сохранив сгенерированный секрет, используйте кнопку Добавить секрет, чтобы создать новый.
Чтобы удалить секрет, в списке секретов на странице OIDC-приложения в строке с нужным секретом нажмите значок
и выберите Удалить. -
Настройте Redirect URI
- Войдите в сервис Yandex Identity Hub
. - На панели слева выберите
Приложения и выберите OIDC-приложениеopen-webui-oidc-app. - Справа сверху нажмите
Редактировать и в открывшемся окне:-
В поле Redirect URI укажите эндпоинт аутентификации для вашего экземпляра Open WebUI в формате:
https://<адрес_сервера>/oauth/oidc/callbackГде
<адрес_сервера>— статический публичный IP-адрес ВМ, зарезервированный ранее.Примечание
Если за экземпляром Open WebUI зарезервировано доменное имя, в качестве адреса сервера используйте это доменное имя.
-
В блоке Безопасность OAuth/OIDC отключите опцию Требовать PKCE, чтобы приложение Yandex Identity Hub при обмене данными не требовало от внешнего приложения использовать расширение безопасности PKCE.
PKCE — это расширение безопасности, применяемое в стандарте OAuth 2.0 с целью минимизировать риски перехвата аутентификационных данных. Подробнее читайте в разделе PKCE.
-
Нажмите Сохранить.
-
Разверните экземпляр Open WebUI
В этом руководстве вы развернете экземпляр Open WebUI на виртуальной машине Compute Cloud в Docker
Чтобы развернуть Open WebUI:
-
Подключитесь к созданной ранее виртуальной машине. В зависимости от заданных настроек ВМ вы можете подключиться к ней по SSH или по OS Login.
-
Установите и настройте Docker:
sudo apt update && sudo apt install docker.io docker-compose -
Добавьте текущего локального пользователя в группу
dockerи запустите новый shell-процесс с обновленным составом групп пользователя:sudo usermod -aG docker $USER newgrp docker -
Создайте директорию для проекта Open WebUI:
mkdir -p ~/projects/open-webui/certs cd ~/projects/open-webui/certs -
Создайте самоподписанный TLS-сертификат, который будет использоваться вашим экземпляром Open WebUI:
Примечание
TLS-сертификат необходим для организации доступа к Open WebUI по протоколу
https. В настройках OIDC-приложения на стороне Yandex Identity Hub значениеRedirect URIможно добавить только со схемойhttps://.-
Сгенерируйте закрытый ключ:
openssl genrsa -out server.key 2048 -
Создайте самоподписанный сертификат со сроком действия 1 год:
openssl req \ -new \ -x509 \ -key server.key \ -out server.crt \ -days 365В появившейся форме заполните поля. В поле
Common Name (e.g. server FQDN or YOUR name)укажите зарезервированный ранее статический публичный IP-адрес, который был присвоен виртуальной машине.
-
-
Для удобства дальнейшей настройки переименуйте полученные файлы:
mv server.crt nginx-cert.crt mv server.key nginx-cert.key -
Перейдите в директорию проекта Open WebUI и создайте файлы его конфигурации:
cd ~/projects/open-webui touch nginx.conf touch docker-compose.yml -
Настройте среду Docker-контейнера для первого запуска Open WebUI:
Примечание
Первый запуск выполняется с выключенной опцией аутентификации через SSO и необходим для создания учетной записи администратора проекта.
-
В текстовом редакторе откройте файл
docker-compose.yml:nano docker-compose.yml -
Добавьте в файл
docker-compose.ymlследующую конфигурацию:version: '3.8' services: open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui environment: - WEBUI_BASE_URL=http://<IP-адрес_ВМ> ports: - "8080:8080" volumes: - open-webui-data:/app/backend/data restart: unless-stopped volumes: open-webui-data:Где
WEBUI_BASE_URL— статический публичный IP-адрес вашей виртуальной машины со схемойhttp://.
-
-
В директории
~/projects/open-webuiвыполните команду:docker-compose up -dДождитесь скачивания и распаковки всех компонентов и зависимостей, а также запуска контейнера:
Creating network "open-webui_default" with the default driver Creating volume "open-webui_open-webui-data" with default driver Pulling open-webui (ghcr.io/open-webui/open-webui:main)... main: Pulling from open-webui/open-webui 4f4f********: Pull complete a8ac********: Pull complete ... Digest: sha256:5c0d8f6d58ea276204b927205e43850689799f25420a67079cb988df******** Status: Downloaded newer image for ghcr.io/open-webui/open-webui:main Creating open-webui ... done -
Убедитесь, что контейнер запущен:
docker psЕсли все настроено правильно, команда должна вывести контейнер
open-webuiсо статусомUp (healthy).Примечание
В зависимости от конфигурации виртуальной машины запуск контейнера может занять несколько минут.
-
Создайте учетную запись администратора Open WebUI:
-
В браузере откройте адрес вашего экземпляра Open WebUI:
http://<IP-адрес_ВМ>:8080 -
На открывшейся странице Open WebUI нажмите кнопку Давайте начнем →.
-
В появившейся форме укажите полное имя, адрес электронной почты (логин) и пароль администратора.
-
Нажмите кнопку Создать аккаунт Администратора.
-
Закройте окно браузера.
-
-
В терминале виртуальной машины остановите контейнер Open WebUI:
docker-compose down -
Настройте конфигурацию nginx
, которая будет запускаться в контейнере:-
В текстовом редакторе откройте файл конфигурации
nginx.conf:nano nginx.conf -
Добавьте в файл
nginx.confследующую конфигурацию:server { listen 80; server_name <адрес_сервера>; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name <адрес_сервера>; ssl_certificate /etc/nginx/ssl/cert.crt; ssl_certificate_key /etc/nginx/ssl/key.key; location / { proxy_pass http://open-webui:8080; proxy_set_header Host $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 X-Forwarded-Port $server_port; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_buffering off; } }Где
server_name(в обеих секциях) — статический публичный IP-адрес вашей виртуальной машины. Если за экземпляром Open WebUI зарезервировано доменное имя, в качестве адреса сервера используйте это доменное имя.
-
-
Обновите конфигурацию Docker-контейнера:
-
В текстовом редакторе откройте файл
docker-compose.yml:nano docker-compose.yml -
Замените содержимое файла
docker-compose.ymlна следующую конфигурацию, указав в ней параметры OIDC-приложения Yandex Identity Hub:version: '3.8' services: open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui environment: - WEBUI_BASE_URL=https://<адрес_сервера> - ENABLE_OAUTH_SIGNUP=true - ENABLE_LOGIN_FORM=true - ENABLE_PERSISTENT_CONFIG=true - ENABLE_OAUTH_PERSISTENT_CONFIG=true - OPENID_REDIRECT_URI=https://<адрес_сервера>/oauth/oidc/callback - OAUTH_CLIENT_ID=<значение_client_ID> - OAUTH_CLIENT_SECRET=<значение_client_secret> - OPENID_PROVIDER_URL=<значение_OpenID_Configuration> - OAUTH_PROVIDER_NAME=Yandex Identity Hub - OAUTH_SCOPES=openid email profile ports: - "8080:8080" volumes: - open-webui-data:/app/backend/data networks: - webui-net restart: unless-stopped nginx: image: nginx:alpine container_name: nginx-webui volumes: - ./certs/nginx-cert.crt:/etc/nginx/ssl/cert.crt:ro - ./certs/nginx-cert.key:/etc/nginx/ssl/key.key:ro - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro ports: - "443:443" - "80:80" depends_on: - open-webui networks: - webui-net restart: unless-stopped volumes: open-webui-data: networks: webui-net: driver: bridgeГде:
-
WEBUI_BASE_URL— статический публичный IP-адрес вашей виртуальной машины со схемойhttps://.Если за экземпляром Open WebUI зарезервировано доменное имя, в качестве адреса сервера используйте это доменное имя.
-
OPENID_REDIRECT_URI— значениеRedirect URIвашего экземпляра Open WebUI. Также содержит статический публичный IP-адрес вашей ВМ или доменное имя, если оно зарезервировано за экземпляром Open WebUI. -
OAUTH_CLIENT_ID— значениеClientIDOIDC-приложения Yandex Identity Hub. -
OAUTH_CLIENT_SECRET— секрет OIDC-приложения Yandex Identity Hub. -
OPENID_PROVIDER_URL— значениеOpenID ConfigurationOIDC-приложения Yandex Identity Hub.
-
-
-
В директории
~/projects/open-webuiвновь запустите конфигурацию:docker-compose up -dДождитесь скачивания и распаковки всех компонентов и зависимостей, а также запуска контейнеров.
-
Убедитесь, что контейнеры запущены:
docker psЕсли все настроено правильно, команда должна вывести контейнеры
nginxиopen-webuiсо статусомUp/Healthy.Примечание
В зависимости от конфигурации виртуальной машины запуск контейнеров может занять несколько минут.
Настройте интеграцию на стороне Open WebUI
Донастройте Open WebUI в пользовательском интерфейсе:
-
В окне браузера откройте адрес вашего экземпляра Open WebUI:
https://<адрес_сервера> -
На странице входа введите логин (адрес электронной почты) и пароль администратора, затем нажмите Войти.
-
В левом нижнем углу нажмите на значок профиля, выберите Настройки и перейдите в раздел Аутентификация.
-
В поле Роль пользователя по умолчанию выберите
пользователь. -
Убедитесь, что опция OAuth / OIDC включена, а также что в следующих полях указаны корректные данные:
- Provider Name —
Yandex Identity Hub. - Provider URL — значение
OpenID ConfigurationOIDC-приложения Yandex Identity Hub. - Client ID — значение
ClientIDOIDC-приложения Yandex Identity Hub. - Client Secret — секрет OIDC-приложения Yandex Identity Hub.
- Redirect URI — значение
Redirect URIвашего экземпляра Open WebUI.
При необходимости задайте в этих полях значения, которые ранее были указаны для переменных окружения в файле
docker-compose.yml. - Provider Name —
-
Задайте значения дополнительных полей:
- Scopes —
openid email profile. - Email Claim —
email. - Username Claim —
preferred_username. - Sub Claim —
sub.
- Scopes —
-
Включите опции OAuth Signup и Merge Accounts by Email.
-
Значения остальных параметров оставьте без изменений и нажмите кнопку Сохранить.
Добавьте пользователя
Чтобы пользователи вашей организации могли аутентифицироваться в Open WebUI с помощью OIDC-приложения Yandex Identity Hub, необходимо явно добавить в OIDC-приложение нужных пользователей и/или группы пользователей.
Примечание
Управлять пользователями и группами, добавленными в OIDC-приложение, может пользователь, которому назначена роль organization-manager.oidcApplications.userAdmin или выше.
Добавьте пользователя в приложение:
- Войдите в сервис Yandex Identity Hub
. - На панели слева выберите
Приложения и выберите нужное приложение. - Перейдите на вкладку Пользователи и группы.
- Нажмите
Добавить пользователей. - В открывшемся окне выберите нужного пользователя или группу пользователей.
- Нажмите Добавить.
Совет
Если вы хотите более тонко настроить аутентификацию пользователей в приложениях, в том числе разрешить аутентификацию только с определенных IP-адресов, используйте политики аутентификации.
Политики аутентификации — это инструмент Yandex Identity Hub, позволяющий гибко настраивать доступ к приложениям, запрещая или разрешая аутентификацию определенным пользователям в определенных приложениях и/или с определенных IP-адресов. Подробнее читайте в разделе Политики аутентификации в Yandex Identity Hub.
Убедитесь в корректной работе приложения
Чтобы убедиться в корректной работе OIDC-приложения и интеграции с Open WebUI, выполните аутентификацию в Open WebUI от имени одного из добавленных в приложение пользователей.
Для этого:
-
В браузере перейдите по адресу вашего экземпляра Open WebUI:
https://<адрес_сервера> -
Если вы были авторизованы в Open WebUI, выйдите из профиля.
-
На странице входа в Open WebUI нажмите Продолжить с Yandex Identity Hub.
-
На странице аутентификации Yandex Cloud укажите email и пароль пользователя Yandex Identity Hub. Пользователь должен быть добавлен в приложение или состоять в группе, добавленной в приложение.
-
Убедитесь, что вы аутентифицировались в Open WebUI.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
-
Удалите виртуальную машину.
-
Удалите статический публичный IP-адрес.
-
При необходимости удалите другие ресурсы Virtual Private Cloud:
Зона доступности — это инфраструктура внутри дата-центра, в котором размещается платформа Yandex Cloud. Подробнее читайте в разделе Зоны доступности.