# Naumen Service Management Platform (SMP)

**Naumen SMP** (https://www.naumen.ru/products/smp/) — это сервисная платформа для управления IT-сервисами и бизнес-процессами.

Подключение Naumen SMP к Blitz Identity Provider выполняется по протоколу **OpenID Connect (OIDC)** и состоит из двух этапов:

* Этап 1. Настройки на стороне Blitz Identity Provider
* Этап 2. Настройки на стороне Naumen SMP

<div style="background-color: #fff3cd; border: 1px solid #ffc107; border-radius: 5px; padding: 10px;">
    <strong>Важно:</strong> <p>В инструкции указано, что Naumen SMP расположен на домене <code class="docutils literal notranslate"><span class="pre">https://smp.example.ru</span></code>, а Blitz IDP установлен на домене <code class="docutils literal notranslate"><span class="pre">https://login.company.com</span></code>. Уточните ваши адреса перед применением инструкции.</p>
</div>

<div style="background-color: #d1ecf1; border: 1px solid #0c5460; border-radius: 5px; padding: 10px;">
    <strong>Примечание о порядке выполнения:</strong>
    <p>Этап 1 (настройка Blitz IDP) выполняется первым, так как при настройке Naumen SMP потребуется <code>client_secret</code>, который генерируется при создании приложения в Blitz Identity Provider.</p>
</div>

---

### Этап 1. Настройки на стороне Blitz Identity Provider

В консоли управления **Blitz Identity Provider** перейдите в раздел **Приложения** и выполните следующие действия:

1. **Создайте** новое приложение, задав его базовые настройки:

   * **Идентификатор (client_id)**: ``naumen-smp``
   * **Название**: ``Naumen SMP``
   * **Домен**: ``https://smp.example.ru``


2. Нажмите **Сохранить**.

3. Далее нажмите кнопку **Параметры** у приложения **Naumen SMP** и отредактируйте параметры:

   * **Протоколы**: выберите ``OpenID Connect / OAuth 2.0`` и нажмите **Сконфигурировать**

   *Далее в параметрах укажите следующие данные:*

   * **Секрет (client_secret)**: сгенерируйте и сохраните безопасный секрет — его нужно будет указать в `external-settings.xml` в тэге client_secret

   * **Предопределенная ссылка возврата (redirect_uri)**: ``https://smp.example.ru/sd``

   * **Префиксы ссылок возврата (redirect URIs)**:
     * ``https://smp.example.ru/``
     * ``https://smp.example.ru/sd``

   * **Допустимые разрешения (scopes)**:
     * ``openid``
     * ``profile``

   * **Тип выдачи авторизации** (response type): ``code`` (Authorization Code Flow)

   * **Метод отправки client_secret**: ``client_secret_basic`` (Basic Authentication)


4. Нажмите **Сохранить**.

5. **Скопируйте** полученный **client_secret** — он потребуется на следующем этапе для настройки Naumen SMP.

6. **Создайте** пользователя для последующей авторизации в Naumen SMP:
   
   * **Перейдите** в раздел **Пользователи** в левой панели консоли управления
   
   * **Нажмите** кнопку **Создать учётную запись пользователя**
   
   * **Заполните** поля на форме:

     | Поле | Значение | Описание |
     |------|----------|----------|
     | **sub** | `логин_пользователя` | Должен совпадать с логином пользователя из SMP, под которым будете заходить |
     | **family_name** | `Фамилия` | Значение атрибута `lastName` |
     | **given_name** | `Имя` | Значение атрибута `firstName` |
     | **email** | `email@example.com` | Должна совпадать с почтой, указанной у пользователя в SMP |
     | **Пароль** | `любой_пароль` | Задайте любой, запомните его — понадобится для входа |

   * **Нажмите** **Сохранить**

<div style="background-color: #d1ecf1; border: 1px solid #0c5460; border-radius: 5px; padding: 10px;">
<strong>Важно:</strong>
<p>Поля <code class="docutils literal notranslate"><span class="pre">sub</span></code> и <code class="docutils literal notranslate"><span class="pre">email</span></code> должны соответствовать данным пользователя в Naumen SMP для корректного сопоставления учётных записей (см. стратегию поиска в <code class="docutils literal notranslate"><span class="pre">external-settings.xml</span></code>).</p>
</div>

---

### Этап 2. Настройки на стороне Naumen SMP

#### 2.0. Об информации о настройке

В конфигурационном файле `external-settings.xml` в тэге `searchStrategy` определяется стратегия поиска пользователей. Она представляет собой мапу, в которой:
* **ключ** — код атрибута сотрудника в SMP
* **значение** — код параметра пользователя в провайдере аутентификации

При сопоставлении пользователя по строковым атрибутам происходит **регистрозависимый поиск**.

**Доступные варианты стратегии:**

* **`and`** — поиск по совпадению всех атрибутов (условие И)
* **`or`** — поиск по совпадению одного из атрибутов (условие ИЛИ)
* **`oneByOne`** — последовательный поиск по атрибутам
* **`script`** — поиск с помощью скрипта

В данной инструкции используется стратегия **`or`** по двум атрибутам:
* `sub` → `login` — поиск по логину
* `email` → `email` — поиск по электронной почте

Это означает, что пользователь будет найден, если совпадёт **хотя бы один** атрибут — логин или email.

Выполните следующие действия:

#### 2.1. Создание файла external-settings.xml

1. **Перейдите** в директорию конфигурации стенда Naumen SMP:

   ```
   cd <путь_к_стенду>/conf/
   ```

2. **Создайте** файл конфигурации `external-settings.xml` со следующим содержимым:

   ```xml
   <?xml version="1.0" encoding="UTF-8"?>
   <ext:configuration xmlns:ext="http://www.naumen.ru/externalSettings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                      xsi:schemaLocation="http://www.naumen.ru/externalSettings ../../../../../../../../sdng-generated/src/main/resources/xsd/externalSettings.xsd">
       <settings>
           <protocol>
               <oidc>
                   <clientId>naumen-smp</clientId>
                   <clientSecret>&lt;client_secret&gt;</clientSecret>
                   <discoverUri>https://login.company.com/blitz/.well-known/openid-configuration</discoverUri>
                   <gateway>https://login.company.com/blitz/oauth/logout</gateway>
                   <scope>openid profile</scope>
                   <clientAuthenticationMethod>client_secret_basic</clientAuthenticationMethod>
               </oidc>
           </protocol>
           <searchStrategy>
               <or>
                   <attributes>
                       <entry>
                           <idpId>sub</idpId>
                           <smpId>login</smpId>
                       </entry>
                       <entry>
                           <idpId>email</idpId>
                           <smpId>email</smpId>
                       </entry>
                   </attributes>
               </or>
           </searchStrategy>
           <other>
               <entry>
                   <key>other</key>
                   <value>settings</value>
               </entry>
           </other>
       </settings>
   </ext:configuration>
   ```

<div style="background-color: #e7f3ff; border: 1px solid #007bff; border-radius: 5px; padding: 10px;">
<strong>Примечание:</strong>
<p>Значение <code class="docutils literal notranslate"><span class="pre">&lt;client_secret&gt;</span></code> замените на скопированный на предыдущем этапе секрет из приложения в Blitz Identity Provider.</p>
</div>

#### 2.2. Настройка dbaccess.properties

1. **Найдите** файл `dbaccess.properties` в директории конфигурации стенда.

2. **Откройте** файл и измените следующие параметры:

   ```properties
   # Включение внешней аутентификации (OIDC)
   ru.naumen.core.authentication.authenticators=INTERNAL,EXTERNAL
   
   # Разрешённые адреса Identity Provider
   suitable.ips=login.company.com
   ```

<div style="background-color: #e7f3ff; border: 1px solid #007bff; border-radius: 5px; padding: 10px;">
<strong>Примечание:</strong>
<ul>
<li>Параметр <code class="docutils literal notranslate"><span class="pre">INTERNAL,EXTERNAL</span></code> включает одновременно внутреннюю аутентификацию SMP и внешнюю через Blitz IDP.</li>
<li>Параметр <code class="docutils literal notranslate"><span class="pre">suitable.ips</span></code> указывает адреса, с которых принимаются ответы от Identity Provider.</li>
</ul>
</div>

#### 2.3. Перезапуск Naumen SMP

**Сохраните** оба конфигурационных файла и **перезапустите** Naumen SMP.

---

### Проверка работоспособности

Для проверки корректности настройки выполните следующие действия:

1. **Откройте** в браузере адрес Naumen SMP: ``https://smp.example.ru/sd/operator``

2. **Убедитесь**, что происходит перенаправление на страницу авторизации Blitz Identity Provider.

3. **Введите** данные пользователя (логин и пароль), которого регистрировали в Blitz Identity Provider на этапе 1.

4. **Убедитесь**, что выполнен успешный вход в Naumen SMP под нужным пользователем.