[Документация Yandex Cloud](../../../../index.md) > [Практические руководства](../../../index.md) > [Безопасность](../../index.md) > Настройка единого входа в приложения (SSO) > Time > SAML

# Создать SAML-приложение в Yandex Identity Hub для интеграции с Time

[Time](https://time-messenger.ru/) — корпоративный мессенджер с поддержкой единого входа по стандарту [SAML](https://ru.wikipedia.org/wiki/SAML).

Чтобы пользователи вашей [организации](../../../../organization/concepts/organization.md) могли аутентифицироваться в Time с помощью технологии единого входа по стандарту SAML, создайте [SAML-приложение](../../../../organization/concepts/applications/saml.md) в Yandex Identity Hub и настройте его на стороне Yandex Identity Hub и на стороне Time.

Управлять SAML-приложениями может пользователь, которому назначена [роль](../../../../organization/security/index.md#organization-manager-samlApplications-admin) `organization-manager.samlApplications.admin` или выше.

Чтобы дать доступ пользователям вашей организации в Time:

1. [Сгенерируйте ключ и сертификат](#generate-key-cert).
1. [Создайте приложение](#create-app).
1. [Настройте интеграцию](#setup-integration).
1. [Добавьте пользователей](#add-users).
1. [Убедитесь в корректной работе приложения](#validate).

## Сгенерируйте ключ и сертификат {#generate-key-cert}

Для шифрования и подписи SAML-ответов Time нужен сертификат и закрытый ключ поставщика услуг (SP). Сгенерируйте его с помощью утилиты `openssl`:

```bash
openssl req -x509 -newkey rsa:2048 \
  -keyout private.key \
  -out certificate.crt \
  -days 365 -nodes \
  -subj "/CN=<имя_инстанса>.time‑messenger.ru"
```

Где `<имя_инстанса>` — имя инстанса Time (поддомена на `time‑messenger.ru`).

В результате будут созданы два файла: `private.key` — закрытый ключ и `certificate.crt` — сертификат. Сохраните их — они понадобятся при настройке SAML в Time.

## Создайте приложение {#create-app}

{% list tabs group=instructions %}

- Интерфейс Cloud Center {#cloud-center}

    1. Войдите в сервис [Yandex Identity Hub](https://kz.center.yandex.cloud/organization).
    1. На панели слева выберите ![shapes-4](../../../../_assets/console-icons/shapes-4.svg) **Приложения**.
    1. Нажмите ![Circles3Plus](../../../../_assets/console-icons/circles-3-plus.svg) **Создать приложение** и в открывшемся окне:
        1. Выберите метод единого входа **SAML (Security Assertion Markup Language)**.
        1. В поле **Имя** задайте имя создаваемого приложения: `time‑saml‑app`.
        1. (Опционально) Добавьте описание и [метки](../../../../resource-manager/concepts/labels.md) приложения.
        1. Нажмите **Создать приложение**.
    1. На вкладке **Обзор** в блоке **Сертификат приложения** нажмите **Скачать сертификат** и сохраните сертификат созданного приложения `time‑saml‑app.cer` — он понадобится при настройке SAML в Time.

{% endlist %}

## Настройте интеграцию {#setup-integration}

Чтобы настроить интеграцию Time с созданным SAML-приложением в Yandex Identity Hub, выполните настройки на стороне Yandex Identity Hub и на стороне Time.

### Настройте эндпоинты и загрузите сертификат поставщика услуг {#sp-endpoints}

Укажите данные вашего инстанса Time. Чтобы узнать значения эндпоинтов, перейдите в системную консоль Time по адресу `https://<имя_инстанса>.time‑messenger.ru/admin_console/authentication/saml` и скопируйте значения полей `Entity ID` и `ACS URL` из настроек SAML.

{% list tabs group=instructions %}

- Интерфейс Cloud Center {#cloud-center}

    1. Войдите в сервис [Yandex Identity Hub](https://kz.center.yandex.cloud/organization).
    1. На панели слева нажмите ![shapes-4](../../../../_assets/console-icons/shapes-4.svg) **Приложения** и выберите SAML-приложение `time‑saml‑app`.
    1. Справа сверху нажмите ![pencil](../../../../_assets/console-icons/pencil.svg) **Редактировать** и в открывшемся окне:
        1. В блоке **Конфигурация поставщика услуг (SP)**:
            1. В поле **SP EntityID** укажите `Entity ID` — уникальный идентификатор поставщика услуг.
            1. В поле **ACS URL** укажите `ACS URL` — адрес, на который поставщик услуг будет отправлять запросы для аутентификации пользователя.
            1. (Опционально) При необходимости добавьте еще `ACS URL`, нажав **Добавить URL**.
            1. (Опционально) В поле **SP Logout URL** добавьте адрес, по которому поставщик удостоверений отправляет SAML-ответ после успешного выхода пользователя из системы.
            1. В поле **Режим подписи** выберите, для каких частей SAML-ответа будет сформирована подпись:

                * `Assertions` — подписываются только утверждения о пользователе (идентификатор, атрибуты, время аутентификации).
                * `Response` — подписывается весь SAML-ответ целиком.
                * `Assertions and Response` — подписываются и утверждения, и весь ответ.
        1. (Опционально) Чтобы принимать только запросы, подписанные одним из добавленных сертификатов, включите **Принимать только подписанные запросы** и добавьте сертификат с помощью кнопки **Добавить сертификат**.
        1. Чтобы SAML-ответ был зашифрован с помощью выбранного сертификата, включите опцию **Шифровать assertion в ответе** и добавьте ранее созданный сертификат с помощью кнопки **Добавить сертификат**.
        1. В списке **Алгоритм шифрования данных** выберите **RSA-OAEP-SHA256 (рекомендуется)**.
        1. В списке **Алгоритм шифрования ключа** выберите **RSA-OAEP-SHA1**.
        1. Нажмите **Сохранить**.

{% endlist %}

### Настройте атрибуты пользователей {#user-attributes}

{% list tabs group=instructions %}

- Интерфейс Cloud Center {#cloud-center}

    1. Войдите в сервис [Yandex Identity Hub](https://kz.center.yandex.cloud/organization).
    1. На панели слева нажмите ![shapes-4](../../../../_assets/console-icons/shapes-4.svg) **Приложения** и выберите SAML-приложение `time‑saml‑app`.
    1. Перейдите на вкладку **Атрибуты**.
    1. Добавьте атрибут для передачи имени пользователя. Справа сверху нажмите **Добавить атрибут** и в открывшемся окне:
        * В поле **Имя атрибута** введите `username`.
        * В поле **Значение** выберите значение `SubjectClaims.preferred_username`.

        {% note info %}
        
        Чтобы изменять значение атрибутов перед отправкой в приложение (например, привести текст к нижнему регистру, удалить пробелы или извлечь часть строки) — используйте трансформации. Они применяются последовательно, сверху вниз.
        
        {% endnote %}

        * Нажмите **Добавить трансформацию** и выберите тип трансформации `ExtractBefore`, в поле **Подстрока** укажите `@`. Она извлечет часть адреса электронной почты до символа `@`. Это значение будет использоваться как имя пользователя в Time.
        * Нажмите **Добавить**.

{% endlist %}

### Настройте SAML-аутентификацию на стороне Time {#setup-sp}

1. Войдите в системную консоль Time по адресу `https://<имя_инстанса>.time‑messenger.ru/admin_console/authentication/saml`.
1. В разделе **Аутентификация**:
   1. Включите опцию **Включить вход через SAML 2.0**.
   1. В поле **URL метаданных провайдера идентификации** укажите адрес, по которому Time отправляет запрос на получение метаданных.

      {% cut "Как узнать адрес файла с метаданными приложения" %}

      1. Войдите в сервис [Yandex Identity Hub](https://kz.center.yandex.cloud/organization).
      1. На панели слева выберите ![shapes-4](../../../../_assets/console-icons/shapes-4.svg) **Приложения** и выберите SAML-приложение `time‑saml‑app`.
      1. В блоке **Конфигурация поставщика удостоверений (IdP)** скопируйте значение поля **Metadata URL**.

      {% endcut %}

   1. В поле **SAML SSO URL** укажите адрес, на который Time отправляет SAML-запрос для запуска последовательности входа.

      {% cut "Как узнать адрес для запросов аутентификации" %}

      1. Войдите в сервис [Yandex Identity Hub](https://kz.center.yandex.cloud/organization).
      1. На панели слева выберите ![shapes-4](../../../../_assets/console-icons/shapes-4.svg) **Приложения** и выберите SAML-приложение `time‑saml‑app`.
      1. В блоке **Конфигурация поставщика удостоверений (IdP)** скопируйте значение поля **Login URL**.

      {% endcut %}

   1. В поле **URL-адрес издателя поставщика учетных записей** укажите адрес, который используется для SAML-запросов.

      {% cut "Как узнать адрес издателя поставщика учетных записей" %}

      1. Войдите в сервис [Yandex Identity Hub](https://kz.center.yandex.cloud/organization).
      1. На панели слева выберите ![shapes-4](../../../../_assets/console-icons/shapes-4.svg) **Приложения** и выберите SAML-приложение `time‑saml‑app`.
      1. В блоке **Конфигурация поставщика удостоверений (IdP)** скопируйте значение поля **Issuer / IdP EntityID**.

      {% endcut %}

   1. В блоке **Публичный сертификат удостоверяющего центра** загрузите файл сертификата приложения `time‑saml‑app.cer`.
   1. Включите опцию **Проверка подписи**.
   1. В поле **Адрес входа через поставщика услуг** укажите адрес вида: `https://<имя_инстанса>.time‑messenger.ru/login/sso/saml`. Продублируйте этот адрес в поле **Идентификатор поставщика услуг**.
   1. Включите опцию **Включить шифрование**.
   1. В блоке **Закрытый ключ поставщика услуг** загрузите файл закрытого ключа `private.key`.
   1. В блоке **Публичный сертификат поставщика услуг** загрузите файл сертификата `certificate.crt`.
   1. В списке **Алгоритм подписи** выберите алгоритм `RSAwithSHA512` для подписания запроса.
   1. В списке **Алгоритм канонизации** выберите `Exclusive XML Canonicalization 1.0 (пропустить комментарии)`.
   1. В поле **Атрибут электронной почты** укажите `emailaddress`.
   1. В поле **Атрибут имени пользователя** укажите `username`.
   1. (Опционально) В поле **Атрибут имени** укажите `givenname` — атрибут для заполнения имени пользователя в Time.
   1. (Опционально) В поле **Атрибут фамилии** укажите `surname` — атрибут для заполнения фамилии пользователя в Time.
   1. (Опционально) В поле **Текст кнопки входа** укажите текст, который будет отображаться на кнопке входа на странице авторизации. По умолчанию — `Используя SAML`.
1. Нажмите **Сохранить**.

## Добавьте пользователей {#add-users}

Для аутентификации в Time, добавьте в SAML-приложение Yandex Identity Hub нужных пользователей и/или [группы пользователей](../../../../organization/concepts/groups.md).

{% note info %}

Управлять пользователями и группами, добавленными в SAML-приложение, может пользователь, которому назначена [роль](../../../../organization/security/index.md#organization-manager-samlApplications-userAdmin) `organization-manager.samlApplications.userAdmin` или выше.

{% endnote %}

Чтобы добавить пользователей в SAML-приложение:

{% list tabs group=instructions %}

- Интерфейс Cloud Center {#cloud-center}

    1. Войдите в сервис [Yandex Identity Hub](https://kz.center.yandex.cloud/organization).
    1. На панели слева выберите ![shapes-4](../../../../_assets/console-icons/shapes-4.svg) **Приложения** и выберите нужное приложение.
    1. Перейдите на вкладку **Пользователи и группы**.
    1. Нажмите ![person-plus](../../../../_assets/console-icons/person-plus.svg) **Добавить пользователей**.
    1. В открывшемся окне выберите нужных пользователей.
    1. Нажмите **Добавить**.

{% endlist %}

{% note tip %}

Если вы хотите более тонко настроить аутентификацию пользователей в приложениях, в том числе разрешить аутентификацию только с определенных IP-адресов, используйте [политики аутентификации](*authentication_policies).

{% endnote %}

[*authentication_policies]: Политики аутентификации — это инструмент Yandex Identity Hub, позволяющий гибко настраивать доступ к приложениям, запрещая или разрешая аутентификацию определенным пользователям в определенных приложениях и/или с определенных IP-адресов. Подробнее читайте в разделе [Политики аутентификации в Yandex Identity Hub](../../../../organization/concepts/authentication-policy.md).

## Убедитесь в корректной работе приложения {#validate}

Чтобы убедиться в корректной работе SAML-приложения и интеграции с Time, выполните вход в Time под учетной записью одного из добавленных пользователей. Для этого:

1. В браузере откройте страницу входа вашего инстанса Time: `https://<имя_инстанса>.time‑messenger.ru`.
1. Выберите вход **Используя SAML**.
1. Аутентифицируйтесь в Yandex Cloud с учетной записью пользователя из вашей организации.
1. Убедитесь, что после успешной аутентификации вы вошли в Time.