Использовать OIDC-приложение и OAuth2 Proxy для настройки единого входа в приложения, не поддерживающие SSO
Примечание
Функциональность находится на стадии Preview.
Не в каждом приложении реализована встроенная поддержка технологии единого входа
В данном руководстве вы воспользуетесь утилитой OAuth2 Proxy
В качестве прокси-сервера в данном руководстве используется nginxnginx и OAuth2 Proxy, а также размещено тестовое приложение. Кроме этого, для реализации защищенного доступа к тестовому приложению вам понадобятся доменное имя и выпущенный для него SSL-сертификат.
Управлять OIDC-приложениями может пользователь, которому назначена роль organization-manager.oauthApplications.admin или выше.
Чтобы настроить доступ в приложение для ваших пользователей Identity Hub:
- Создайте и настройте OIDC-приложение в Identity Hub.
- Подготовьте виртуальную машину с тестовым приложением.
- Настройте интеграцию.
- Убедитесь в корректной работе интеграции.
Создайте и настройте OIDC-приложение в Identity Hub
Создайте OIDC-приложение
-
Войдите в сервис Yandex Identity Hub
. -
На панели слева выберите
Приложения. -
В правом верхнем углу страницы нажмите
Создать приложение и в открывшемся окне:-
Выберите метод единого входа OIDC (OpenID Connect).
-
В поле Имя задайте имя создаваемого приложения:
website-oidc-app. -
В поле Каталог выберите каталог, в котором будет создан OAuth-клиент для приложения.
-
(Опционально) В поле Описание задайте описание приложения.
-
(Опционально) Добавьте метки:
- Нажмите Добавить метку.
- Введите метку в формате
ключ: значение. - Нажмите Enter.
-
Нажмите Создать приложение.
-
-
В открывшемся окне на вкладке Обзор в блоке Конфигурация поставщика удостоверений (IdP) скопируйте и сохраните значение параметра
ClientIDс уникальным идентификатором OAuth-клиента. Это значение понадобится позднее при настройке утилитыOAuth2 Proxy. -
Создайте секрет приложения:
В блоке Секреты приложения нажмите кнопку Добавить секрет и в открывшемся окне:
- (Опционально) Добавьте произвольное описание создаваемого секрета.
- Нажмите Создать.
В окне отобразится сгенерированный секрет приложения. Сохраните полученное значение.
Важно
После обновления или закрытия страницы с информацией о приложении посмотреть секрет будет невозможно.
Если вы закрыли или обновили страницу, не сохранив сгенерированный секрет, используйте кнопку Добавить секрет, чтобы создать новый.
Чтобы удалить секрет, в списке секретов на странице OIDC-приложения в строке с нужным секретом нажмите значок
и выберите Удалить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте OAuth-клиент:
yc iam oauth-client create \ --name website-oauth-client \ --scopes openid,email,profileГде:
--name— имя OAuth-клиента.--scopes— набор атрибутов пользователей, которые будут передаваться вOAuth2 Proxy. Указаны атрибуты:openid— идентификатор пользователя. Обязательный атрибут.email— адрес электронной почты пользователя.profile— дополнительная информация о пользователе, такая как имя, фамилия, аватар.
Результат:
id: ajeiu3otac08******** name: website-oauth-client scopes: - email - openid - profile folder_id: b1gkd6dks6i1******** status: ACTIVEСохраните ClientID приложения (значение поля
id) — оно понадобится для создания секрета и настройкиOAuth2 Proxy. -
Создайте секрет для OAuth-клиента, указав полученный на предыдущем шаге идентификатор:
yc iam oauth-client-secret create \ --oauth-client-id <идентификатор_OAuth-клиента>Результат:
oauth_client_secret: id: ajeohit7l3t6******** oauth_client_id: ajeiu3otac08******** masked_secret: yccs__460c4ca204**** created_at: "2026-01-22T08:51:27.263668671Z" secret_value: yccs__4d2243a25b501220ee2a6f********************************e76e64e797_07911bfbСохраните значение поля
secret_value, оно понадобится для настройкиOAuth2 Proxy. -
Создайте OIDC-приложение:
yc organization-manager idp application oauth application create \ --organization-id <идентификатор_организации> \ --name website-oidc-app \ --description "OIDC-приложение для настройки доступа пользователей Identity Hub к сайту" \ --client-id <идентификатор_OAuth-клиента> \ --authorized-scopes openid,email,profile \ --group-distribution-type noneГде:
--organization-id— идентификатор организации, в которой нужно создать OIDC-приложение. Обязательный параметр.--name— имя OIDC-приложения. Обязательный параметр.--description— описание OIDC-приложения. Необязательный параметр.--client-id— идентификатор OAuth-клиента, полученный на втором шаге. Обязательный параметр.--authorized-scopes— укажите те же атрибуты, которые были указаны при создании OAuth-клиента.--group-distribution-type— укажитеnone, так как группы пользователей не передаются вOAuth2 Proxy.
Результат:
done (2s) id: ek0odpetc1o4******** name: website-oidc-app organization_id: bpf2c65rqcl8******** description: OIDC-приложение для настройки доступа пользователей Identity Hub к сайту group_claims_settings: group_distribution_type: NONE client_grant: client_id: ajeiu3otac08******** authorized_scopes: - openid - email - profile status: ACTIVE created_at: "2026-01-22T08:53:26.873089Z" updated_at: "2026-01-22T08:53:27.439690Z"
Настройте Redirect URI
- Войдите в сервис Yandex Identity Hub
. - На панели слева выберите
Приложения и выберите нужное OIDC-приложение. - Справа сверху нажмите
Редактировать и в открывшемся окне:-
В поле Redirect URI укажите эндпоинт аутентификации для тестового приложения:
https://<ваш_домен>/oauth2/callbackГде
<ваш_домен>— домен вашего тестового приложения, например:example.com. -
Нажмите Сохранить.
-
Обновите OAuth-клиент, указав Redirect URI:
yc iam oauth-client update \
--id <идентификатор_OAuth-клиента> \
--redirect-uris "https://<ваш_домен>/oauth2/callback"
Где:
<идентификатор_OAuth-клиента>— идентификатор OAuth-клиента, полученный при его создании.--redirect-uris— эндпоинт аутентификации для вашего тестового приложения. Например:https://example.com/oauth2/callback.
Результат:
id: ajeiu3otac08********
name: website-oauth-client
redirect_uris:
- https://example.com/oauth2/callback
scopes:
- email
- openid
- profile
folder_id: b1gkd6dks6i1********
status: ACTIVE
Добавьте пользователя
Чтобы ваши пользователи Identity Hub могли проходить аутентификацию в тестовом приложении с помощью протокола OIDC, необходимо явно добавить в OIDC-приложение нужных пользователей и/или группы пользователей.
Примечание
Управлять пользователями и группами, добавленными в OIDC-приложение, может пользователь, которому назначена роль organization-manager.oidcApplications.userAdmin или выше.
Добавьте пользователя в приложение:
- Войдите в сервис Yandex Identity Hub
. - На панели слева выберите
Приложения и выберите нужное приложение. - Перейдите на вкладку Пользователи и группы.
- Нажмите
Добавить пользователей. - В открывшемся окне выберите нужного пользователя или группу пользователей.
- Нажмите Добавить.
-
Получите идентификатор пользователя или группы пользователей.
-
Чтобы добавить в приложение пользователя или группу пользователей, выполните команду:
yc organization-manager idp application oauth application add-assignments \ --id <идентификатор_приложения> \ --subject-id <идентификатор_пользователя_или_группы>Где:
--id— идентификатор OIDC-приложения.--subject-id— идентификатор нужного пользователя или группы пользователей.
Результат:
done (2s) assignment_deltas: - action: ADD assignment: subject_id: aje0j5mts02t********
Подготовьте виртуальную машину с тестовым приложением
В данном руководстве вы развернете тестовое приложение, а также настроите утилиты nginx и OAuth2 Proxy на виртуальной машине под управлением ОС Ubuntu 24.04.
Важно
Если вы хотите настроить доступ к вашему существующему приложению, выполните аналогичные настройки на том сервере, который принимает запросы от пользователей вашего приложения. В этом случае создавать отдельную виртуальную машину не требуется, и вы можете переходить к настройке nginx и OAuth2 Proxy.
Подготовьте окружение Yandex Cloud
Прежде чем создавать виртуальную машину, убедитесь, что в вашем каталоге есть облачная сеть и подсеть. При необходимости воспользуйтесь следующими инструкциями, чтобы создать их:
Кроме того, в вашей облачной сети создайте группу безопасности, разрешающую входящий TCP-трафик для портов 22, 80 и 443, а также любой исходящий трафик.
Создайте виртуальную машину
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Compute Cloud.
-
На панели слева выберите
Виртуальные машины и нажмите кнопку Создать виртуальную машину. -
В блоке Образ загрузочного диска в поле Поиск продукта введите
Ubuntu 24.04 LTSи выберите публичный образ Ubuntu 24.04 LTS. -
В блоке Расположение выберите зону доступности, соответствующую зоне доступности вашей подсети.
-
В блоке Вычислительные ресурсы выберите конфигурацию
2 vCPU 4 ГБ RAM. -
В блоке Сетевые настройки:
- В поле Подсеть выберите ваши сеть и подсеть в зоне доступности создаваемой виртуальной машины.
- В поле Публичный IP-адрес оставьте значение
Автоматически, чтобы назначить ВМ случайный публичный IP-адрес из пула Yandex Cloud. - В поле Группы безопасности выберите созданную ранее группу безопасности.
-
В блоке Доступ выберите вариант SSH-ключ и укажите данные для доступа к ВМ:
- В поле Логин введите имя пользователя, например:
yc-user. Не используйте имяrootили другие имена, зарезервированные ОС. Для выполнения операций, требующих прав суперпользователя, используйте командуsudo. -
В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
-
Нажмите кнопку Добавить ключ.
-
Задайте имя SSH-ключа.
-
Выберите вариант:
-
Ввести вручную— вставьте содержимое открытого SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. -
Загрузить из файла— загрузите открытую часть SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. -
Сгенерировать ключ— автоматическое создание пары SSH-ключей.При добавлении сгенерированного SSH-ключа будет создан и загружен архив с парой ключей. В ОС на базе Linux или macOS распакуйте архив в папку
/home/<имя_пользователя>/.ssh. В ОС Windows распакуйте архив в папкуC:\Users\<имя_пользователя>/.ssh. Дополнительно вводить открытый ключ в консоли управления не требуется.
-
-
Нажмите кнопку Добавить.
SSH-ключ будет добавлен в ваш профиль пользователя организации. Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя внутри создаваемого ресурса.
-
- В поле Логин введите имя пользователя, например:
-
В блоке Общая информация задайте имя ВМ:
my-nginx-vm. -
Нажмите кнопку Создать ВМ.
Чтобы создать виртуальную машину, выполните команду:
yc compute instance create \
--name my-nginx-vm \
--zone <зона_доступности_ВМ> \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2404-lts,auto-delete=true \
--ssh-key <путь_к_открытому_SSH-ключу> \
--network-interface subnet-name=<имя_подсети>,nat-ip-version=ipv4,security-group-ids=<идентификатор_группы_безопасности>
Где:
-
--name— имя ВМ. Требования к имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
--zone— зона доступности, в которой вы создаете виртуальную машину. -
--ssh-key— путь к файлу с публичным SSH-ключом, например:~/.ssh/id_ed25519.pub. Для этого ключа на ВМ будет автоматически создан пользовательyc-user. -
subnet-name— имя подсети в том же каталоге и той же зоне доступности, в которых создается виртуальная машина. -
<идентификатор_группы_безопасности>— идентификатор группы безопасности, созданной ранее.
Результат
done (29s)
id: epdvqa1rtvjj********
folder_id: b1gt6g8ht345********
created_at: "2026-01-22T12:03:52Z"
name: my-nginx-vm
zone_id: ru-central1-b
platform_id: standard-v2
resources:
memory: "2147483648"
cores: "2"
core_fraction: "100"
status: RUNNING
metadata_options:
gce_http_endpoint: ENABLED
aws_v1_http_endpoint: ENABLED
gce_http_token: ENABLED
aws_v1_http_token: DISABLED
boot_disk:
mode: READ_WRITE
device_name: epdbi403v2or********
auto_delete: true
disk_id: epdbi403v2or********
network_interfaces:
- index: "0"
mac_address: d0:0d:1f:d2:83:be
subnet_id: e2lqsms4cdl3********
primary_v4_address:
address: 192.168.2.31
one_to_one_nat:
address: 89.169.***.***
ip_version: IPV4
security_group_ids:
- enp378h7n0cm********
serial_port_settings:
ssh_authorization: OS_LOGIN
gpu_settings: {}
fqdn: epdvqa1rtvjj********.auto.internal
scheduling_policy: {}
network_settings:
type: STANDARD
placement_policy: {}
hardware_generation:
legacy_features:
pci_topology: PCI_TOPOLOGY_V2
application: {}
Настройте интеграцию
Создайте тестовое приложение и настройте nginx
-
Убедитесь, что для вашего домена создана ресурсная A-запись, указывающая на публичный IP-адрес созданной виртуальной машины. Если такой ресурсной записи нет, создайте ее.
Примечание
Если управление вашим доменом делегировано сервису Yandex Cloud DNS, для создания ресурсной записи воспользуйтесь инструкцией Создать ресурсную запись. Если доменом управляет сторонний провайдер, воспользуйтесь документацией этого провайдера или обратитесь в его службу поддержки.
-
Подключитесь по SSH к созданной виртуальной машине.
-
Установите
nginx:sudo apt update && sudo apt upgrade -y sudo apt install nginx -y -
Создайте файлы тестового приложения:
-
Сохраните имя вашего домена в переменную окружения:
export MY_DOMAIN="<имя_домена>"Где
<имя_домена>— имя вашего домена, для которого создана ресурсная запись, указывающая на публичный IP-адрес текущей виртуальной машины. Например:example.com. -
Создайте директорию и основную HTML-страницу тестового приложения:
sudo mkdir /var/www/$MY_DOMAIN sudo touch /var/www/$MY_DOMAIN/index.html \ && echo "<h1>Your Web application that is available to your Identity Hub users only</h1>" | sudo tee -a /var/www/$MY_DOMAIN/index.html
-
-
Создайте самоподписанный SSL-сертификат для вашего домена. Для этого выполните команду и введите значения, следуя инструкциям на экране:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/my-private.key -out /etc/ssl/certs/my-certificate.crtВ результате будет создан самоподписанный SSL-сертификат, которого достаточно для тестирования предлагаемого решения.
Совет
Чтобы при использовании приложения браузер не выдавал предупреждение о проблемах с безопасностью, используйте SSL-сертификат, выданный удостоверяющим центром.
Например, чтобы создать сертификат от Let's Encrypt и сохранить его и закрытый ключ на свой компьютер, воспользуйтесь инструкциями Добавить сертификат от Let's Encrypt® и Получить содержимое сертификата от Let's Encrypt.
-
Задайте настройки
nginx:-
С помощью текстового редактора
nanoоткройте файл конфигурацииnginx:sudo nano /etc/nginx/conf.d/default.conf -
Замените содержимое открытого файла следующим:
server { listen 80; listen [::]:80; server_name <имя_домена>; return 301 https://$server_name$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name <имя_домена>; location /oauth2/ { proxy_pass http://127.0.0.1:4180; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Auth-Request-Redirect $request_uri; # or, if you are handling multiple domains: # proxy_set_header X-Auth-Request-Redirect $scheme://$host$request_uri; } location = /oauth2/auth { proxy_pass http://127.0.0.1:4180; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Uri $request_uri; # nginx auth_request includes headers but not body proxy_set_header Content-Length ""; proxy_pass_request_body off; } # Пути к вашим сертификату и ключу ssl_certificate /etc/ssl/certs/my-certificate.crt; ssl_certificate_key /etc/ssl/private/my-private.key; # Рекомендуемые настройки безопасности ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; access_log /var/log/nginx/$server_name.access.log; error_log /var/log/nginx/$server_name.error.log; location / { auth_request /oauth2/auth; error_page 401 =403 /oauth2/sign_in; # pass information via X-User and X-Email headers to backend, # requires running with --set-xauthrequest flag auth_request_set $user $upstream_http_x_auth_request_user; auth_request_set $email $upstream_http_x_auth_request_email; proxy_set_header X-User $user; proxy_set_header X-Email $email; root /var/www/$server_name/; index index.html; try_files $uri $uri/ =404; } }Где
<имя_домена>— имя вашего домена, для которого создана ресурсная запись, указывающая на публичный IP-адрес текущей виртуальной машины. Например:example.com.Важно
Если вы используете SSL-сертификат, выданный удостоверяющим центром, скопируйте файлы сертификата и закрытого ключа на виртуальную машину и укажите локальные пути к этим файлам соответственно в полях
ssl_certificateиssl_certificate_keyфайла конфигурации.
-
-
Примените обновленные настройки
nginx:sudo nginx -s reload
Настройте OAuth2 Proxy
-
Подключитесь по SSH к созданной виртуальной машине.
-
Установите
актуальную версию утилитыOAuth2 Proxyудобным вам способом.В приведенном примере используется установка путем скачивания архива с исполняемым файлом. На момент написания настоящего руководства актуальной являлась версия
v7.14.2:sudo wget https://github.com/oauth2-proxy/oauth2-proxy/releases/download/v7.14.2/oauth2-proxy-v7.14.2.linux-amd64.tar.gz sudo tar -xvf oauth2-proxy-v7.14.2.linux-amd64.tar.gz -C /usr/bin/ sudo chmod +x /usr/bin/oauth2-proxy-v7.14.2.linux-amd64/oauth2-proxy sudo rm oauth2-proxy-v7.14.2.linux-amd64.tar.gz -
Задайте настройки
OAuth2 Proxy:-
Сгенерируйте секрет cookie, который потребуется при настройке утилиты:
dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64 | tr -d -- '\n' | tr -- '+/' '-_' ; echoСохраните полученное значение — оно понадобится позднее.
-
С помощью текстового редактора
nanoоткройте файл конфигурацииoauth2-proxy.cfg:sudo nano /usr/bin/oauth2-proxy-v7.14.2.linux-amd64/oauth2-proxy.cfg -
Вставьте в файл
oauth2-proxy.cfgследующую конфигурацию, подставив в нее необходимые значения:provider = "oidc" # Тип провайдера provider_display_name = "Yandex Identity Hub" # Имя провайдера на кнопке reverse_proxy = true # Включение режима работы за nginx client_id = "<идентификатор_ClientID>" # ClientID OIDC приложения client_secret = "<секрет_OIDC_приложения>" # Секрет OIDC приложения oidc_issuer_url = "https://auth.yandex.cloud" cookie_name = "_oauth2_proxy" # Имя cookie cookie_secret = "<секрет_cookie>" # Сгенерированный ранее ключ cookie email_domains = [ "<домен_1>","<домен_2>",...,"<домен_n>" ] # Домены, для которых разрешена аутентификация upstreams = [ "<адрес_вашего_приложения>" ] # Адрес бэкенд-приложения http_address = "127.0.0.1:4180" # Адрес и порт, на которых слушает oauth2-proxy redirect_url = "<redirect_URI>" # URL для обратного вызоваГде:
-
client_id— значениеClientIDOAuth-клиента, полученное ранее при создании OIDC-приложения. -
client_secret— значение секрета, сгенерированного в OIDC-приложении. -
cookie_secret— секрет cookie, сгенерированный и сохраненный ранее. -
email_domains— список доменов в адресе электронной почты, для которых будет разрешена аутентификация пользователя Identity Hub в тестовом приложении.Утилита
OAuth2 Proxyпроверяет домен электронной почты, указанной в полеЭлектронная почтанастроек пользователя в Identity Hub (атрибутemail).В поле
email_domainsукажите домен электронной почты того пользователя, которого вы добавили ранее в ваше OIDC-приложение. Если в OIDC-приложение вы добавляли группу пользователей, укажите домен электронной почты того пользователя группы, от имени которого вы будете тестировать аутентификацию. Вы можете указать несколько доменов через запятую.Совет
Чтобы в тестовом приложении могли аутентифицироваться пользователи с аккаунтом на Яндексе, добавьте в список
email_domainsзначениеyandex.ru. -
upstreams— адрес вашего приложения. Например:https://example.com/. -
redirect_url— значениеRedirect URI, которое вы задали при настройке OIDC-приложения.
-
-
-
Запустите
OAuth2 Proxy:sudo /usr/bin/oauth2-proxy-v7.14.2.linux-amd64/oauth2-proxy \ --config /usr/bin/oauth2-proxy-v7.14.2.linux-amd64/oauth2-proxy.cfgСовет
Вы также можете запустить
OAuth2 Proxyв фоновом режиме, например, с помощью утилиты nohup .
Убедитесь в корректной работе аутентификации
Чтобы убедиться в корректной работе аутентификации в тестовом приложении с помощью OIDC-приложения:
-
В браузере введите адрес вашего тестового приложения (например,
https://example.com).Если все было настроено правильно, в браузере откроется окно аутентификации
OAuth2 Proxy. -
Нажмите кнопку Sign in with Yandex Identity Hub.
-
Пройдите аутентификацию от имени того пользователя, которого вы ранее добавили в OIDC-приложение. Если в OIDC-приложение вы добавляли группу пользователей, пройдите аутентификацию от имени пользователя, который входит в эту группу.
Если все было настроено правильно, в браузере откроется страница с вашим тестовым приложением.
-
При попытке аутентифицироваться от имени пользователя, не добавленного в OIDC-приложение, или имеющего адрес электронной почты с доменом, отличным от разрешенных в настройках
OAuth2 Proxy, ваше приложение выдаст сообщение об ошибке доступа.