Аутентификация пользователей с 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.
- Установите срок действия секрета.
- Скопируйте значение созданного секрета и сохраните его в безопасном месте. Это значение потребуется при настройке ТестОпс.
Настройте ТестОпс
Настройте интеграцию с Azure AD в разделе auth.openid
файла values.yaml.
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. В этом случае вам нужно использовать альтернативный путь входа в адресном поле вашего браузера и установить URL-адрес следующим образом: https://testops.local/login/system, затем ТестОпс войдет в систему под учетной записью системы.