Аутентификация пользователей с OpenID и Azure AD
Инструкция действительна только для ТестОпс версии 5.8.1 и выше.
Предварительные условия
- Вам нужен административный доступ к вашему Azure AD или администратор рядом с вами.
- Вам нужен доступ к конфигурационным файлам ТестОпс.
- Вам нужно иметь возможность применять изменения в конфигурации, что может потребовать некоторого времени простоя.
- ТестОпс должен работать через HTTPS, т.е. между ТестОпс и серверами Azure AD должен быть что-то вроде обратного прокси. Пожалуйста, проконсультируйтесь с вашим сетевым администратором или DevOps для обеспечения правильной конфигурации на стороне сети.
Интеграция ТестОпс и Azure AD
Перед тем как продолжить, пожалуйста, убедитесь, что выполнены условия:
- ТестОпс развернут и доступен через URL-адрес с HTTPS. В примерах ниже используется
https://testops.local
. - Настройки вашего экземпляра Azure AD доступны на портале Azure.
Выполните настройку на стороне Azure AD
Выполните все подготовительные шаги для интеграции согласно руководству Microsoft:
-
Создайте ресурс Azure Active Directory B2C.
-
Создайте клиент Azure AD B2C.
Этот шаг приведет к созданию нового экземпляра Active Directory.
-
Зарегистрируйте новое приложение, которое будет клиентом OpenID.
-
Создайте секрет, который зарегистрированные пользователи будут использовать для аутентификации в Active Directory.
Настройте перенаправление URI на стороне Azure AD
-
Сформируйте URI перенаправления, связанный с вашим развертыванием ТестОпс. URI должен состоять из трех частей:
-
URL-адрес вашего экземпляра ТестОпс. Например, https://testops.local;
-
фиксированная часть /login/oauth2/code/;
-
суффикс с именем провайдера:
- Для развертыва ния через Docker Compose и Linux-пакеты суффикс — openid.
- Для развертывания в Kubernetes суффикс может быть установлен с помощью параметра
providerName
в файле values.yaml. Учтите, что имя провайдера не должно содержать пробелов или специальных символов, то есть должен быть одним словом.
Итоговая строка будет выглядеть так: https://testops.local/login/oauth2/code/openid.
-
-
Добавьте корректный URI перенаправления в настройки созданного приложения:
- На главной странице портала Azure перейдите к ресурсу Azure AD B2C.
- В панели Manage выберите App registrations, затем перейдите на вкладку All applications.
- Выберите приложение, которое вы создали, следуя руководству Microsoft.
- В панели Manage выберите Authentication.
- Добавьте URI перенаправления, созданный на предыдущем шаге.
- Сохраните изменения.
Получите интеграционные эндпоинты OpenID Azure AD
После выполнения действий, описанных в руководстве Microsoft, вы получите следующие параметры, необходимые для интеграции вашего экземпляра ТестОпс с клиентом Azure AD:
- ID приложения (клиента),
- секрет клиента,
- метаданные OpenID Connect (эндпоинты, необходимые для настройки ТестОпс):
- эндпоинт авторизации (URI),
- эндпоинт JWKS (URI),
- эндпоинт токена (URI).
Все эндпоинты, используемые потоками OpenID, доступны из вашего клиента AzureAD B2C. Выполните следующие шаги для их копирования:
-
На главной странице портала Azure перейдите к ресурсу Azure AD B2C.
-
В панели Manage выберите App registrations, затем перейдите на вкладку Endpoints.
-
В открывшейся панели найдите Microsoft Entra ID OpenID Connect metadata document.
-
Скопируйте URL документа и вставьте его в браузер.
-
На открывшейся странице вы увидите метаданные, связанные с вашим клиентом AD.
-
Найдите и скопируйте следующие эндпоин ты со страницы:
- authorization_endpoint — генерируется по шаблону
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
; - jwks_uri — генерируется по шаблону
https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys
; - token_endpoint — генерируется по шаблону
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
.
- authorization_endpoint — генерируется по шаблону
Получите метаданные OpenID Azure AD
Для настройки вашего экземпляра ТестОпс в качестве клиента OpenID вам необходимо получить ID приложения и секрет клиента, созданные в клиенте Azure AD.
ID приложения
- На главной странице портала Azure перейдите к ресурсу Azure AD B2C.
- В панели Manage выберите App registrations, затем перейдите на вкладку All applications.
- Выберите приложение, созданное с помощью руководства Microsoft.
- В разделе Essentials скопируйте Application (client) ID.
Секрет клиента
- Начните с шага, где вы получили Application (client) ID.
- Нажмите ссылку рядом с Client Credentials в разделе Essentials или выберите Certificates & Secrets в панели Manage.
- Нажмите New client secret.
- Установите срок действия секрета.
- Скопируйте значение созданного секрета и сохраните его в безопасном месте. Это значение потребуется при настройке ТестОпс.
Настройте ТестОпс
- Kubernetes
- Docker Compose
- DEB/RPM
Настройте интеграцию с Azure AD в разделе auth.openid
файла values.yaml.
# Это пример, который не будет работать без изменений.
auth:
primary: openid
<...>
openid:
enabled: true
providerName: azure
clientName: testops
clientId: <your_client_ID_here>
clientSecret: <your_client_secret_here>
redirectUri: https://testops.local/login/oauth2/code/azure
scope: openid, email, profile
authorizationGrantType: authorization_code
authorizationUri: https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
jwksSetUri: https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys
tokenUri: https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
usernameAttribute: preferred_username
defaultRole: ROLE_GUEST
syncRoles: false
groupRoleAttribute: groupRoleAttribute
roleUserGroups: roleUserGroups
roleAdminGroups: roleAdminGroups
# параметры ниже в обычном режиме работы остаются пустыми
userinfoUri:
issuerUri:
firstNameAttribute:
lastNameAttribute:
В указанном выше примере установите значения параметров следующим образом:
-
primary
:- Устанавливает OpenID в качестве метода аутентификации пользователей по умолчанию.
- Должен иметь значение
openid
.
-
enabled
:- Включает OpenID в качестве метода аутентификации пользователей.
- Должен иметь значение
true
.
-
providerName
:- Определяет имя провайдера OpenID на экране входа.
- Должен иметь значение, состоящее из одного слова без пробелов и специальных символов, например,
azure
.
-
clientName
:- Определяет имя ТестОпс как клиента OpenID.
- Должен иметь значение, совпадающее с заданным при настройке приложения. Например,
testops
.
-
clientId
:- Определяет ID ТестОпс как клиента OpenID.
- Должен иметь значение, совпадающее с ID приложения.
-
clientSecret
:- Определяет секретный ключ ТестОпс как клиента OpenID.
- Должен иметь значение, совпадающее с секретным ключом клиента.
-
redirectUri
:- Определяет URI для перенаправления в рамках OpenID.
- Должен иметь значение, совпадающее с созданным URI перенаправления. Например,
https://testops.local/login/oauth2/code/azure
.
-
scope
:- Указывает разрешения и утверждения, запрашиваемые во время аутентификации.
- Должен иметь одно из значений:
openid
,email
,profile
. Минимально необходимо указатьopenid
.
-
authorizationGrantType
:- Определяет тип предоставления, используемый ТестОпс.
- Должен иметь значение
authorization_code
.
-
authorizationUri
:- Указывает строку URI для запуска процесса авторизации с провайдером OpenID.
- Должен иметь значение, совпадающее с эндпоинтом авторизации.
-
jwksSetUri
:- Указывает строку URI для получения JSON Web Key Set (JWKS), используемого для проверки токенов.
- Должен иметь значение, совпадающее с эндпоинтом JWKS.
-
tokenUri
:- Указывает строку URI для получения токена доступа после успешной авторизации.
- Должен иметь значение, совпадающее с эндпонитом токенов.
-
usernameAttribute
:- Указывает имя утверждения, которое ТестОпс будет использовать для создания имени пользователя.
- Должен иметь одно из значений:
preferred_username
,email
или другое.
-
defaultRole
:- Определяет глобальную роль нового пользователя, успешно прошедшего аутентификацию через OpenID.
- Должен иметь одно из значений:
ROLE_ADMIN
,ROLE_USER
,ROLE_GUEST
(ROLE_GUEST
рекомендуется для более точного контроля использования лицензий).
-
syncRoles
:- Определяет, нужно ли назначать глобальные роли на основе нахождения пользователя в группах провайдера OpenID.
- Должен иметь одно из значений:
false
илиtrue
.
-
groupRoleAttribute
:- Указывает имя утверждения, в котором содержатся названия групп:
roleUserGroups
— список групп, нахождение в которых предоставляет глобальную рольROLE_USER
.roleAdminGroups
— список групп, нахождение в которых предоставляет глобальную рольROLE_ADMIN
.
- Указывает имя утверждения, в котором содержатся названия групп:
-
userinfoUri
— параметр, который, как правило, не используется в ТестОпс. -
issuerUri
— параметр, который, как правило, не используется в ТестОпс. -
firstNameAttribute
:- Указывает ключ (имя) утверждения, содержащего имя пользователя.
- Может иметь пустое значение, чтобы ТестОпс использовал стандартное утверждение OpenID для имени.
-
lastNameAttribute
:- Указывает ключ (имя) утверждения, содержащего фамилию пользователя.
- Может иметь пустое значение, чтобы ТестОпс использовал стандартное утверждение OpenID для фамилии.
Чтобы использовать OpenID с развертыванием Docker Compose, вам необходимо использовать конфигурацию, расположенную в папке testops-openid. Настройте параметры в файле .env, сопоставив ранее полученные эндпоинты OpenID следующим образом:
- token_endpoint →
TESTOPS_OPENID_TOKENURI
, - jwks_uri →
TESTOPS_OPENID_JWKSETURI
, - authorization_endpoint →
TESTOPS_OPENID_AUTHORIZATIONURI
.
Изменение файла docker-compose.yml не требуется.
Конечная конфигурация будет выглядеть следующим образом:
# Это пример, который не будет работать без изменений.
TESTOPS_OPENID_CLIENTNAME=testops
TESTOPS_OPENID_CLIENTID=<your_client_ID_here>
TESTOPS_OPENID_CLIENTSECRET=<your_client_secret_here>
TESTOPS_OPENID_REDIRECTURI=http://testops.local/login/oauth2/code/openid
TESTOPS_OPENID_SCOPE=openid,email,profile
TESTOPS_OPENID_USERNAMEATTRIBUTE=preferred_username
TESTOPS_OPENID_AUTHORIZATIONGRANTTYPE=authorization_code
TESTOPS_OPENID_AUTHORIZATIONURI=https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
TESTOPS_OPENID_JWKSETURI=https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys
TESTOPS_OPENID_TOKENURI=https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
TESTOPS_OPENID_DEFAULTROLE=ROLE_GUEST
TESTOPS_OPENID_SYNCROLES=false
TESTOPS_OPENID_GROUPROLEATTRIBUTE=group
TESTOPS_OPENID_GROUPAUTHORITIES_ROLEUSERGROUPS=roleUserGroups
TESTOPS_OPENID_GROUPAUTHORITIES_ROLEADMINGROUPS=roleAdminGroups
Чтобы использовать OpenID с развертыванием через DEB-/RPM-пакеты, вам необходимо изменить конфигурационный файл /opt/testops/conf/testops.conf. По умолчанию настройки для поддержки OpenID закомментированы. Чтобы включить OpenID, найдите и раскомментируйте параметры, указанные ниже, а затем установите их в соответствии с ранее полученными эндпоинтами OpenID:
- token_endpoint →
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_TOKENURI
, - jwks_uri →
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_JWKSETURI
, - authorization_endpoint →
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_AUTHORIZATIONURI
.
# Это пример, который не будет работать без изменений.
ALLURE_LOGIN_PRIMARY: openid
ALLURE_LOGIN_OPENID_DEFAULTROLE=ROLE_GUEST
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_CLIENTNAME=openid
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_CLIENTID=<your_client_ID_here>
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_CLIENTSECRET=<your_client_secret_here>
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_REDIRECTURI=https://testops.local/login/oauth2/code/openid
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_SCOPE=openid,email,profile
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_AUTHORIZATIONGRANTTYPE=authorization_code
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_AUTHORIZATIONURI=https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_JWKSETURI=https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_TOKENURI=https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_USERNAMEATTRIBUTE=preferred_username
ALLURE_LOGIN_OPENID_SYNCROLES=false
# с ледующие параметры нужно раскомментировать только если ALLURE_LOGIN_OPENID_SYNCROLES=true
ALLURE_LOGIN_OPENID_GROUPROLEATTRIBUTE=groups
ALLURE_LOGIN_OPENID_GROUPAUTHORITIES_ROLEUSERGROUPS=roleUserGroups
ALLURE_LOGIN_OPENID_GROUPAUTHORITIES_ROLEADMINGROUPS=roleAdminGroups
В приведенном выше примере значения параметров должны быть установлены следующим образом:
-
ALLURE_LOGIN_PRIMARY
:- Устанавливает OpenID в ка честве метода аутентификации пользователей по умолчанию.
- Должно быть
openid
.
-
ALLURE_LOGIN_OPENID_DEFAULTROLE
:- Определяет глобальную роль нового пользователя, успешно аутентифицированного через OpenID.
- Варианты:
ROLE_ADMIN
,ROLE_USER
илиROLE_GUEST
(ROLE_GUEST
— предпочтительный вариант для лучшего контроля использования лицензий).
-
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_CLIENTNAME
:- Определяет имя ТестОпс как OpenID клиента.
- Должно быть
openid
.
-
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_CLIENTID
:- Указывает ID ТестОпс как OpenID клиента.
- Должно совпадать с ID приложения.
-
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_CLIENTSECRET
:- Определяет секретный ключ ТестОпс как OpenID клиента.
- Должно совпадать с секретом клиента.
-
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_REDIRECTURI
:- Указывает URI перенаправления для OpenID.
- Должно совпадать с URI перенаправления. Например:
http://testops.local/login/oauth2/code/openid
.
-
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_SCOPE
:- Определяет разреш ения и утверждения, запрашиваемые во время аутентификации.
- Варианты:
openid
,email
иprofile
, но обязательно должен бытьopenid
.
-
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OPENID_AUTHORIZATIONGRANTTYPE
:- Определяет тип гранта, используемого ТестОпс.
- Должно быть
authorization_code
.
-
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_AUTHORIZATIONURI
:- Указывает URI, используемый для начала процесса авторизации с провайдером OpenID.
- Должно совпадать с URI эндпоинта авторизации.
-
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_USERNAMEATTRIBUTE
:- Указывает утверждение, которое ТестОпс будет использовать для создания имени пользователя аутентифицированного пользователя.
- Варианты:
preferred_username
,email
и др.
-
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_JWKSETURI
:- Указывает URI для получения набора JSON Web Key Set (JWKS), используемого для проверки токенов, выданных провайдером OpenID.
- Должно совпадать с URI JWKS.
-
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OPENID_TOKENURI
:- Указывает URI для получения токена доступа после успешной авторизации.
- Должно совпадать с URI токенов.
Вход в систему под учетной записью системы
Может потребоваться войти в систему под локальной учетной записью (также известной как системная учетная запись), когда метод аутентификации по умолчанию установлен как openid. В этом случае вам нужно использовать альтернативный путь входа в адресном поле вашего браузера и установить URL-адрес следующим образом: https://testops.local/login/system, затем ТестОпс войдет в систему под учетной записью системы.