# Рабочий процесс



# Процесс авторизации

Для авторизации пользователя через единую авторизацию пользователей ТПУ необходимо выполнить следующие действия:

1. Создать приложение (перейти по ссылке [https://api.tpu.ru/dashboard](https://api.tpu.ru/dashboard)).
2. Создать платформу и указать версию приложения (получить **api\_key**).
3. Настроить авторизацию через Oauth (получить **client\_id** и **client\_secret**) - указать доверительные домены (каждый на отдельной строке)
4. Дождаться проверки приложения со стороны ТПУ и начать пользоваться.
5. Прописать все IP адреса серверов (и локальных машин разработчиков при необходимости) в доверенную зону на которую будет отправлен ответ от сервера авторизации (https://api.tpu.ru/dashboard МЕНЮ-&gt;Авторизация-&gt;Oauth2 Oauyh2 Сервер)

#### Процесс авторизации

1\. Необходимо перенаправить браузер пользователя по адресу используя метод GET

<p class="callout info">**https://oauth.tpu.ru/authorize**</p>

 передав следующие параметры

<table border="1" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-client" style="border-collapse: collapse; width: 100%; height: 263.61px;"><colgroup><col style="width: 26.6072%;"></col><col style="width: 73.512%;"></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;">***client\_id*** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 29.7969px;">Наименование клиента на страничке вашего приложения https://api.tpu.ru/dashboard МЕНЮ-&gt;Авторизация-&gt;Oauth2 Oauyh2 Сервер</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">***redirect\_uri*** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 29.7969px;">Ссылка, на которую после успешной авторизации сервер делает редирект пользователя.

> домен указанного адреса должен соответствовать основному домену в настройках приложения и перечисленным значениям в списке доверенных redirect uri — адреса сравниваются до корневого домена

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">***response\_type*** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 29.7969px;">Тип ответа, который Вы хотите получить. В большинстве случаев достаточно указать **code**.</td></tr><tr style="height: 144.422px;"><td style="height: 144.422px;">***state*** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 144.422px;">**Параметр состояния** в протоколах авторизации позволяет восстановить предыдущее состояние приложения. > Его используют, чтобы защитить приложение от атак, связанных с подделкой запросов (CSRF). Для этого с каждым запросом аутентификации связывают уникальное и не поддающееся угадыванию значение

</td></tr></tbody></table>

<details id="bkmrk-%C2%A0"><summary>Пример запроса</summary>

```json
https://oauth.tpu.ru/authorize?client_id=1&redirect_uri=http://example.com/callback&response_type=code&state=bdc1c79ecb83c00122d24a77e06aa5dc16c8280f7541e89a32108659c353f5
```

</details>#### Ввод корпоративных данных

2\. Если пользователь уже авторизован, то браузер будет перенаправлен по адресу **redirect\_uri**, в противном случае пользователю будет предложено ввести свой корпоративный логин и пароль в системе.

[![Screenshot_71.jpg](https://devdocs.tpu.ru/uploads/images/gallery/2025-07/scaled-1680-/screenshot-71.jpg)](https://devdocs.tpu.ru/uploads/images/gallery/2025-07/screenshot-71.jpg)

3\. Получение токена авторизации **access\_token** для пользователя и для приложения. методом GET передаем параметры на следующий адрес:

<p class="callout info">**[https://oauth.tpu.ru/access\_token](https://oauth.tpu.ru/access_token)**</p>

<table border="1" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-client-1" style="border-collapse: collapse; width: 100%; height: 450.828px;"><colgroup><col style="width: 26.6072%;"></col><col style="width: 73.512%;"></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;">***client\_id*** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 29.7969px;">Идентификатор приложения</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">*****client\_secret***** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 29.7969px;">Секретный ключ приложения</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">*****timestamp*****</td><td style="height: 29.7969px;">Текущая метка времени в формате Unix timestamp

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

</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">*****code***** <span style="color: rgb(224, 62, 45);">(обязательно, для авторизации пользователей)</span></td><td style="height: 46.5938px;">Одноразовый короткоживущий код, который клиент должен использовать для обмена на токен доступа, полученный на первом этапе авторизации. Данное поле обязательно - если авторизуется пользователь.

</td></tr><tr style="height: 144.422px;"><td style="height: 144.422px;">*****state***** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 144.422px;">**Параметр состояния** в протоколах авторизации позволяет восстановить предыдущее состояние приложения. > Его используют, чтобы защитить приложение от атак, связанных с подделкой запросов (CSRF). Для этого с каждым запросом аутентификации связывают уникальное и не поддающееся угадыванию значение

</td></tr><tr style="height: 110.828px;"><td style="height: 110.828px;">*****grant\_type***** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 110.828px;">Тип авторизации

> разрешённые типы можно посмотреть в настройках авторизации вашего приложения

</td></tr><tr><td>*****redirect\_uri***** *<span style="color: rgb(224, 62, 45);">(обязательно)</span>*

</td><td>должно совпадать с предыдущим запросом

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">*****sig***** <span style="color: rgb(224, 62, 45);">(обязательно, для авторизации приложений)</span>

</td><td style="height: 29.7969px;">[Контрольная сумма](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/rascet-kontrolnoi-summy "Расчет контрольной суммы") GET-параметров из HTTP-запроса. Данный параметр обязательный если был пропущен первый шаг получения **code.**

> Ключом для расчета контрольной суммы указывается секретный ключ [доверенного приложения](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/doverennye-prilozeniia-tpu "Доверенные приложения ТПУ"), а **не** ключ версии приложения.

</td></tr></tbody></table>

<details id="bkmrk-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-https"><summary>Пример запроса</summary>

```json
https://oauth.tpu.ru/access_token?client_id=1&client_secret=H2PkHm&redirect_uri=http://mysite.ru&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479&grant_type=authorization_code
```

</details>В результате выполнения данного запроса Ваш сервер получит вновь созданный **access\_token**. Вместе с **access\_token** серверу возвращается время жизни ключа **expires\_in** в секундах. **expires\_in** по умолчанию 24 часа. Процедуру авторизации приложения необходимо повторять в случае истечения срока действия **access\_token**, смены пользователем своего логина или пароля, или удаления приложения из настроек. Также в ответе присутствует **refresh\_token** - срок годности 1 неделя, с помощью его можно получить новый **access\_token** не проводя процедуру авторизации повторно.

4\. Проверка токена авторизации, данный метод вернёт сведения об указанном токене авторизации

<p class="callout info">**https://oauth.tpu.ru/check-token**</p>

<table border="1" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-client-2" style="border-collapse: collapse; width: 100%; height: 148.984px;"><colgroup><col style="width: 100.03%;"></col></colgroup><thead><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**В HTTP заголовке-*Authorization***</td></tr></thead><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">Требуется указать строку следующего формата

> Bearer &lt;Токен авторизации&gt;

</td></tr></tbody></table>

В случае успешной проверки токена, придёт ответ в формате JSON, в котором будет полезная информация, идентификатор клиента, авторизовавшего пользователя (**client\_id**), идентификатор пользователя (**user\_id**), идентификатор личности (**lichnost\_id**), контекст пользователя (**username**), время создания токена, а так же тип токена (**type**). Токены бывают двух типов - личные (**personal**) и системные (**system**).

Персональные токены получены - путём прямой авторизации пользователя в приложении (ввод логина и пароля), системные токены формируются в доверительных приложениях и микро-сервисах с использованием механизма отложенной авторизации.

<details id="bkmrk-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D0%B0-%7B-%C2%A0-%C2%A0-"><summary>Пример ответа</summary>

```json
{
    "message": "Valid",
    "body": {
        "created": "2025-07-21 09:32:26",
        "expired": "2025-07-22 09:32:26",
        "client_id": "my-app-id-123456",
        "type": "personal",
        "user_id": 123,
        "lichnost_id": 123,
        "username": "portal_login"
    }
}
```

</details><div id="bkmrk--2"></div>5\. Получение данных об авторизированном пользователе

<p class="callout info">**https://oauth.tpu.ru/user**</p>

<table border="1" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-client-3" style="border-collapse: collapse; width: 100%; height: 148.984px;"><colgroup><col style="width: 100.03%;"></col></colgroup><thead><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**В HTTP заголовке-Authorization**</td></tr></thead><tbody><tr><td>Требуется указать строку следующего формата

> Bearer &lt;Токен авторизации&gt;

</td></tr></tbody></table>

<details id="bkmrk-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D0%B0-%7B-%22use"><summary>Пример ответа</summary>

```json
{
    "user_id": 59568,
    "lichnost_id": 745454,
    "elements": {
        "familiya": "Иванов",
        "imya": "Иван",
        "otchestvo": "Иванович"
    },
    "full_name": "Иванов Иван Иванович",
    "last_name": "Иванов",
    "first_name": "Иван",
    "patronymic": "Иванович",
    "email": "login@tpu.ru",
  
    "login": "login",
    "message": "OK"
}
```

</details>6\. Завершение сессии пользователя. Для успешной завершении сессии пользователя нужно сделать редирект на следующий URL.

<p class="callout info">***https://oauth.tpu.ru/auth/logout?redirect=&lt;redirect\_uri&gt;***</p>

<table border="1" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-redire" style="border-collapse: collapse; width: 100%; height: 148.984px;"><colgroup><col style="width: 26.6072%;"></col><col style="width: 73.512%;"></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;">*****redirect\_uri*****</td><td style="height: 29.7969px;">Cсылка, на которую, после успешного завершения сессии, сервер делает редирект пользователя.</td></tr></tbody></table>

> На этой странице вы должны локально завершить сессию пользователя и сделать редирект на главную страницу вашего приложения.

#### Вместо заключения

В вашем приложении вы должны хранить в сессии **идентификатор авторизованного пользователя** и **access\_token**. Для получения других данных о пользователе вы можете воспользоваться доступными методами RESTful API.

Секретные ключи вашего приложения вы не должны хранить на клиенте и обязаны обеспечить надлежащую их сохранность.

# Восстановление авторизации

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

Для получения нового **access\_token** необходимо выполнить GET-запрос на следующий эндпоинт, передав обязательные параметры:

<p class="callout info">**[https://oauth.tpu.ru/access\_token](https://oauth.tpu.ru/access_token)**</p>

<table border="1" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-client-1" style="border-collapse: collapse; width: 100%; height: 450.828px;"><colgroup><col style="width: 26.6072%;"></col><col style="width: 73.512%;"></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;">***client\_id*** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 29.7969px;">[Идентификатор приложения](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/nastroiki-edinoi-avtorizacii "Идентификатор приложения")</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">*****client\_secret***** <span style="color: rgb(224, 62, 45);">(обязательно)</span></td><td style="height: 29.7969px;">[Секретный ключ приложения](https://devdocs.tpu.ru/books/prilozeniia-tpu/page/nastroiki-edinoi-avtorizacii "Секретный ключ приложения")</td></tr><tr><td>*****grant\_type***** *<span style="color: rgb(224, 62, 45);">(обязательно)</span>*</td><td>Значение должно **refresh\_token**

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">*****refresh\_token***** <span style="color: rgb(224, 62, 45);">(обязательно)</span>

</td><td style="height: 29.7969px;">Требуется указать ключ обновления, полученный при авторизации

</td></tr></tbody></table>

<details id="bkmrk-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-https"><summary>Пример запроса</summary>

```json
https://oauth.tpu.ru/access_token?client_id=1&client_secret=12345678&grant_type=refresh_token&refresh_token=def502000c9e8750e3a5a39be466d664732e21303a491ef50cea65d2da1e4533ade84dfc1b503ddd282849a14e05996d176f211a8a979d2f47f65565b94da1e9be750e6e78053df0d00168d5b937a54e74e5e7adfa769d8377fd054fd9bee9f49f46dfb4afaefebc5cb582210f225cec21ee5e0fcfcd6808f365df72026f2424c52af750cac6987e5738c14a172094241499bb1fd1131ea20c2dbd72a09e5522940f601895beb9443700f4561766da0344876f821ae9de08832859b35540e679cedad51ad52aa1d0d4c7e5e7b3dcbecab278e3755dfdb94303c4b41b32c7800c9724cf081f71427afc9611b75ae726d1ba5dbb6237bc21c74326212adc83b8d50c440ffd6516847ea6ae643d77b3bd4109113ac250d1ced80a
```

</details>В результате выполнения данного запроса Ваш сервер получит вновь созданный **access\_token**. Вместе с **access\_token** серверу возвращается время жизни ключа **expires\_in** в секундах. Процедуру авторизации приложения необходимо повторять в случае истечения срока действия **access\_token**, смены пользователем своего логина или пароля, или удаления приложения из настроек. Также в ответе присутствует **refresh\_token** - срок годности 1 неделя, с помощью его можно получить новый **access\_token** не проводя процедуру авторизации повторно.