Аутентификация пользователей с OpenID и Azure AD 
Важно
Инструкция действительна только для серверной версии ТестОпс.
Предварительные условия 
- Вам нужен административный доступ к вашему Azure AD или администратор рядом с вами.
- Вам нужен доступ к конфигурационным файлам ТестОпс.
- Вам нужно иметь возможность применять изменения в конфигурации, что может потребовать некоторого времени простоя.
- ТестОпс должен работать через HTTPS, т. е. между инстансами ТестОпс и Azure AD должен быть настроен, например, обратный прокси. Пожалуйста, проконсультируйтесь с вашим сетевым администратором или DevOps для обеспечения правильной конфигурации на стороне сети.
Интеграция ТестОпс и Azure AD 
Перед тем как продолжить, пожалуйста, убедитесь, что выполнены условия:
- ТестОпс развернут и доступен через URL-адрес с HTTPS. В примерах ниже используется https://testops.example.com.
- Настройки вашего экземпляра 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.example.com; 
- фиксированная часть /login/oauth2/code/; 
- суффикс с именем провайдера: - Для развертывания через Docker Compose и Linux-пакеты суффикс — openid.
- Для развертывания в Kubernetes суффикс может быть установлен с помощью параметра providerNameв файле values.yaml. Учтите, что имя провайдера не должно содержать пробелов или специальных символов, то есть должен быть одним словом.
 
 - Итоговая строка будет выглядеть так: https://testops.example.com/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: <ID клиента>
      clientSecret: <секретный ключ клиента>
      redirectUri: https://testops.example.com/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.example.com/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.example.com/login/system, затем ТестОпс войдет в систему под учетной записью системы.

