Перейти к основному содержимому

Аутентификация пользователей с OpenID и Azure AD

Важно

Инструкция действительна только для ТестОпс версии 5.8.1 и выше.

Предварительные условия

  1. Вам нужен административный доступ к вашему Azure AD или администратор рядом с вами.
  2. Вам нужен доступ к конфигурационным файлам ТестОпс.
  3. Вам нужно иметь возможность применять изменения в конфигурации, что может потребовать некоторого времени простоя.
  4. ТестОпс должен работать через HTTPS, т.е. между ТестОпс и серверами Azure AD должен быть что-то вроде обратного прокси. Пожалуйста, проконсультируйтесь с вашим сетевым администратором или DevOps для обеспечения правильной конфигурации на стороне сети.

Интеграция ТестОпс и Azure AD

Перед тем как продолжить, пожалуйста, убедитесь, что выполнены условия:

  1. ТестОпс развернут и доступен через URL-адрес с HTTPS. В примерах ниже используется https://testops.local.
  2. Настройки вашего экземпляра Azure AD доступны на портале Azure.

Выполните настройку на стороне Azure AD

Выполните все подготовительные шаги для интеграции согласно руководству Microsoft:

  1. Создайте ресурс Azure Active Directory B2C.

  2. Создайте клиент Azure AD B2C.

    Этот шаг приведет к созданию нового экземпляра Active Directory.

  3. Зарегистрируйте новое приложение, которое будет клиентом OpenID.

  4. Создайте секрет, который зарегистрированные пользователи будут использовать для аутентификации в Active Directory.

Настройте перенаправление URI на стороне Azure AD

  1. Сформируйте URI перенаправления, связанный с вашим развертыванием ТестОпс. URI должен состоять из трех частей:

    1. URL-адрес вашего экземпляра ТестОпс. Например, https://testops.local;

    2. фиксированная часть /login/oauth2/code/;

    3. суффикс с именем провайдера:

      • Для развертывания через Docker Compose и Linux-пакеты суффикс — openid.
      • Для развертывания в Kubernetes суффикс может быть установлен с помощью параметра providerName в файле values.yaml. Учтите, что имя провайдера не должно содержать пробелов или специальных символов, то есть должен быть одним словом.

    Итоговая строка будет выглядеть так: https://testops.local/login/oauth2/code/openid.

  2. Добавьте корректный URI перенаправления в настройки созданного приложения:

    1. На главной странице портала Azure перейдите к ресурсу Azure AD B2C.
    2. В панели Manage выберите App registrations, затем перейдите на вкладку All applications.
    3. Выберите приложение, которое вы создали, следуя руководству Microsoft.
    4. В панели Manage выберите Authentication.
    5. Добавьте URI перенаправления, созданный на предыдущем шаге.
    6. Сохраните изменения.

Получите интеграционные эндпоинты OpenID Azure AD

После выполнения действий, описанных в руководстве Microsoft, вы получите следующие параметры, необходимые для интеграции вашего экземпляра ТестОпс с клиентом Azure AD:

  • ID приложения (клиента),
  • секрет клиента,
  • метаданные OpenID Connect (эндпоинты, необходимые для настройки ТестОпс):
    • эндпоинт авторизации (URI),
    • эндпоинт JWKS (URI),
    • эндпоинт токена (URI).

Все эндпоинты, используемые потоками OpenID, доступны из вашего клиента AzureAD B2C. Выполните следующие шаги для их копирования:

  1. На главной странице портала Azure перейдите к ресурсу Azure AD B2C.

  2. В панели Manage выберите App registrations, затем перейдите на вкладку Endpoints.

  3. В открывшейся панели найдите Microsoft Entra ID OpenID Connect metadata document.

  4. Скопируйте URL документа и вставьте его в браузер.

  5. На открывшейся странице вы увидите метаданные, связанные с вашим клиентом AD.

  6. Найдите и скопируйте следующие эндпоинты со страницы:

    • 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.

Получите метаданные OpenID Azure AD

Для настройки вашего экземпляра ТестОпс в качестве клиента OpenID вам необходимо получить ID приложения и секрет клиента, созданные в клиенте Azure AD.

ID приложения

  1. На главной странице портала Azure перейдите к ресурсу Azure AD B2C.
  2. В панели Manage выберите App registrations, затем перейдите на вкладку All applications.
  3. Выберите приложение, созданное с помощью руководства Microsoft.
  4. В разделе Essentials скопируйте Application (client) ID.

Получение &quot;Application ID&quot;

Секрет клиента

  1. Начните с шага, где вы получили Application (client) ID.
  2. Нажмите ссылку рядом с Client Credentials в разделе Essentials или выберите Certificates & Secrets в панели Manage.
  3. Нажмите New client secret.
  4. Установите срок действия секрета.
  5. Скопируйте значение созданного секрета и сохраните его в безопасном месте. Это значение потребуется при настройке ТестОпс.

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

Настройте ТестОпс

Настройте интеграцию с 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:

  • 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, затем ТестОпс войдет в систему под учетной записью системы.