# Приложения ТПУ

# Введение



# Знакомство с приложениями ТПУ

Данная книга описывает основные принципы работы с приложениями в единой информационной системе ТПУ (ЕИС ТПУ).

Любой корпоративный пользователь может управлять своим приложением.

# Типы приложений

Приложения ТПУ могут быть классифицированы на следующие категории:

1. Web-приложение;
2. Web-сайт;
3. Десктопное приложение;
4. Мобильное приложение.

# Доверенные приложения ТПУ

Приложения, которые имеют значок (**Доверенное приложение**) имеют больший доступ к функционалу через API.

[![Screenshot_19.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-19.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-19.jpg)

К дополнительному функционалу относятся следующие функции:

- Получение Идентификаторов
- Без ограничений доступа по IP
- Сквозная авторизация между приложениями

<p class="callout info">Установить данный атрибут могут только сотрудники УЦ после проверки приложения</p>

# Платформы приложения

Каждое приложение может иметь несколько реализаций под разные платформах, но только одну реализацию на каждую платформу.

Типы платформ приложений:

1. Android
2. iOS
3. Web
4. Winphone
5. Desktop

# Версии приложения

На каждой платформе приложения может быть несколько версий, но только одна может быть активна в рамках каждой платформы.

Версия приложения содержит важные данные для взаимодействия с API.

- Публичный ключ
- Приватный ключ

<p class="callout info">Публичный ключ вы можете использовать для всех взаимодействий с API ([https://api.tpu.ru](https://api.tpu.ru))</p>

<p class="callout warning">Приватный ключ используется только для расчета контрольной суммы параметров в запросах и должен быть скрыт от посторонних пользователей</p>

# Разработчики приложения

Разработчиками приложения являются пользователи, у которых есть корпоративный логин и пароль в ТПУ. Разработчики могут добавлять других разработчиков, а также менять параметры своего приложения и обращаться к закрытой части документации по API с функцией "Попробовать".

# Личности приложения ТПУ

Данный раздел содержит ограниченный список личностей, которые так или иначе связаны с приложением, но не обязательно имеющие доступ к этому приложению.

Личности из этого списка могут присутствовать в выходных документах или быть ответственными за выполнение задач в приложении.

# Ключ доступа

Ключ доступа - это публичный SSL ключ, который использует сервер авторизации для расшифровки сообщений, зашифрованные приватным ключом данного приложения.

<p class="callout info">Публичный ключ добавляет разработчик приложения</p>

<p class="callout warning">Приватный ключ находится в самом приложении и не загружается в систему приложений ТПУ</p>

# Создание приложения



# Регистрация нового приложения

Для начала работы надо авторизоваться в приложение API TPU ([https://api.tpu.ru](https://api.tpu.ru))

1. Перейти на сайт API TPU ([https://api.tpu.ru](https://api.tpu.ru))
2. Нажать на кнопку вход (см. рисунок) следуя инструкциям авторизации ввести свой корпоративный логин и пароль.

[![Screenshot_20.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-20.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-20.jpg)

3\. После авторизации в боковом меню выбрать раздел "Все приложения"

<p class="callout info">В списке будут отображаться приложения, где вы являетесь разработчиком. Если кто-то вас добавит к своему приложению - оно отобразиться у вас в боковом меню.</p>

[![Screenshot_21.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-21.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-21.jpg)

4\. В правом верхнем углу нажмите кнопку "Добавить" и заполните все поля, при необходимости можете сразу указать [публичный SSL ключ](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/kliuc-dostupa) вашего приложения

[![Screenshot_22.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-22.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-22.jpg)

5\. После добавления вашего приложения отправьте заявку на почту <support@tpu.ru> для подтверждения вашего приложения.

# Добавление платформы приложения

После добавления вашего приложения, требуется добавить платформы и получить API Key для работы с методами API.

Для этого в меню выберите следующие пункты "Настройки" -&gt; "Платформы".

[![Screenshot_25.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-25.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-25.jpg)

В появившимся окне необходимо выбрать [тип платформы](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/platformy-prilozeniia) приложения и заполнить все поля. Нажать "Сохранить".

<p class="callout info">Идентификатор платформы должен содержать только латинские буквы. Обычно это алиас системы или доменное имя сайта, записанное в обратном порядке</p>

[![Screenshot_24.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-24.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-24.jpg)

# Добавлении версии приложения

Следующий шаг - это добавление версии приложения, для того чтобы получить [API Key](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/versii-prilozeniia) и [Private Key](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/versii-prilozeniia) для работы с методами [https://api.tpu.ru](https://api.tpu.ru)

Выберите пункт "Версии" напротив интересующей вас платформы приложения.

<p class="callout info">Каждая платформа приложения может иметь несколько разных версий</p>

[![Screenshot_26.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-26.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-26.jpg)

В модальном окне заполните номер версии приложения, описание и статус.

<p class="callout info">Только *версия приложения* в статусе "Опубликовано" будет работать в API TPU</p>

  
![Screenshot_27.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-27.jpg)

После добавления версии приложения вы получите два ключа *публичный* и *приватный.* Вы их будете использовать при работе с методами API TPU.

[![Screenshot_28.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-28.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-28.jpg)

# Расчет контрольной суммы

Для некоторых методов требуется указать дополнительный параметр безопасности sig. В интерфейсе вы сможете проверить алгоритм расчета этого параметра на сервере. Разработчику приложения нужно реализовать свой собственный метод для получения данного параметра.

[![Screenshot_29.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-29.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-29.jpg)

> Список параметров, которые могут быть переданы через HTTP-Get запрос, игнорируемые при расчёте контрольной суммы. т.к. эти параметры системные и не могут влиять на работу.
> 
> 1. **sig**
> 2. **apikey**
> 3. **suppress\_response\_code**
> 4. **access\_token**

Пример на языке [PHP](https://www.php.net/)

```php
public function sig(array $arguments, $secret)
{
    ksort($arguments);
    $string = '';

    foreach ($arguments as $key => $value) {
        $string .= "$key=$value";
    }

    return md5($string . $secret);
}
```

Пример на языке [Java](https://www.java.com/ru/)

```java
import java.security.MessageDigest;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.security.NoSuchAlgorithmException;

public String sig(Map<String, String> arguments, String secret) throws NoSuchAlgorithmException {
    StringBuilder builder = new StringBuilder();

    List<String> keys = arguments.keySet().stream().sorted().collect(Collectors.toList());

    for(String key : keys) {
        builder.append(key).append("=").append(arguments.get(key));
    }

    builder.append(secret);
    byte[] digest = MessageDigest.getInstance("MD5").digest(builder.toString().getBytes());

    StringBuilder resultBuilder = new StringBuilder();

    for(byte b : digest) {
        resultBuilder.append(String.format("%02x", b));
    }

    return resultBuilder.toString();
}
```

Пример на языке [Scala](https://scala-lang.org/)

```scala
import java.security.MessageDigest
import scala.collection.immutable.ListMap

def sig(arguments: Map[String, String], secret: String): String = {
    MessageDigest.getInstance("MD5").digest {
        s"${ListMap(arguments.toSeq.sortBy({ case (key, value) => key }):_*).map({ case (key, value) => s"$key=$value" }).mkString}$secret".getBytes
    }.map(byte => String.format("%02x", byte)).mkString
}
```

Пример на языке [Python](https://www.python.org/)

```python
import collections
import hashlib

def sig(arguments, secret):
    ordered = collections.OrderedDict(sorted(arguments.items()))
    concated = "".join(list(map(lambda k,v: k + "=" + v, ordered.keys(), ordered.values()))) + secret
    return hashlib.md5(concated.encode()).hexdigest()
```

# Управление приложением



# Настройки единой авторизации

Для подключение единой авторизации в приложении требуется настроить параметры *Oauth2 сервер*

[![Screenshot_30.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-30.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-30.jpg)

*Здесь отображаются*

- *Идентификатор клиента* ***(client\_id)***
- *Секретный ключ приложения* ***(client\_secret)***

<p class="callout warning">*Для параметра* ***client\_secret*** *должно быть обеспечено хранение в защищенном хранилище*</p>

[![Screenshot_33.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-33.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-33.jpg)

***Доверенные домены*** - в этом списка на каждой новой строке указывается перечень доменных имён, с которых разрешено подключение вашего приложения.

<table border="1" id="bkmrk-%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC" style="border-collapse: collapse; width: 100%; height: 178.781px; border-width: 1px; border-style: inset;"><colgroup><col style="width: 39.4517%;"></col><col style="width: 60.5483%;"></col></colgroup><thead><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**Дополнительные параметры**</td><td style="height: 29.7969px;">Описание</td></tr></thead><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">***Авторизация включена***</td><td style="height: 29.7969px;">Основной переключатель - доступна или нет авторизация</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">***Авторизация делегирована конечным пользователям***</td><td style="height: 29.7969px;">Пользователи могу авторизоваться в системе</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">***Авторизация без использования PKCE***</td><td style="height: 29.7969px;">Для повышения безопасности можно использовать *Proof Key for Code Exchange*</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">***Пропускать авторизацию если задана область видимости***</td><td style="height: 29.7969px;">  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">***Разрешить автономный доступ без согласия***</td><td style="height: 29.7969px;">Разрешено для только [доверенных приложений ТПУ](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/doverennye-prilozeniia-tpu)</td></tr></tbody></table>

Настройки области видимости - это список параметров которые сервис единой авторизации сможет предоставить приложению, если пользователь согласиться их передать.

[![Screenshot_32.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-32.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-32.jpg)

# Способы авторизации и получения доступа

Настройка способов авторизации осуществляется в меню "Типы грантов"

[![Screenshot_35.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-35.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-35.jpg)

В этом разделе указывается способы получения авторотационного ключа пользователя, требуется указать дополнительные способы если ваше приложение их использует.

<p class="callout info">Способ авторизации ***Personal access token*** доступен только для [доверенных приложений ТПУ](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/doverennye-prilozeniia-tpu)</p>

![Screenshot_34.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-34.jpg)

# Добавление разработчиков

Для добавления разработчика приложения необходимо в меню выбрать "Настройки" -&gt; "Разработчики"

[![Screenshot_36.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-36.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-36.jpg)

В списке разработчиков - нажать кнопку "Добавить" и в появившимся окне выбрать роль пользователя в приложении, указать корпоративный логин и мобильный номер телефона.

[![Screenshot_37.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/scaled-1680-/screenshot-37.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2024-10/screenshot-37.jpg)