# Описание функций авторизации ____ #### Алгоритм Refresh token токен действует 12 часов и за эти 12 часов не реже чем раз в 3 часа нужно обновить Refresh token ну и заодно Access token обновиться. Аccess token действует 20 минут (позже уменьшу до 10 минут) и его можно обновить в любое время, если будет просрочен выдаст 401 ошибку. Чтобы время от времени по расписанию не запрашивать обновление токена, можно сделать обвёртку для 2й отправки запроса, в случае выявления просрочки токена чтобы эта обвёртка отправляла запрос Refresh, а потом обратно в нужное место отправляла запрос. Настройки хранятся в HashiCorp Vault и их можно загрузить туда так: vault kv put secret/org-ccalm-jwt jwt.secret=my-secret-value db.user=admin db.pass=123456 В базе есть поля такие как e_iin и они записываются так: pgp_sym_encrypt('Мои данные', 'пароль') Читаются так: select pgp_sym_decrypt(e_name, 'пароль') from main.drivers; ____ ## Оглавление 1. [Получить список разрешений для пользователя по Access token](#получить-список-разрешений-для-пользователя-по-Access-token) 2. [Получить CAPTCHA с проверочным токеном](#получить-captcha-с-проверочным-токеном) 3. [Создать нового пользователя](#создать-нового-пользователя) 4. [Получить информацию о пользователе по его Access token ](#получить-информацию-о-пользователе-по-его-access-token ) 5. [Авторизоваться](#авторизоваться) 6. [Обновить токен доступа (а также обновить рефреш токен)](#обновить-токен-доступа-а-также-обновить-рефреш-токен) 7. [Ссылка для подтверждения смены пароля (переходят на неё из почты)](#ссылка-для-подтверждения-смены-пароля-переходят-на-неё-из-почты) 8. [Принять капчу и код для инициализации процедуры восстановления пароля](#принять-капчу-и-код-для-инициализации-процедуры-восстановления-пароля) 9. [Обновить пароль по логину и старому паролю](#обновить-пароль-по-логину-и-старому-паролю) 10. [Проверить валидность токена](#проверить-валидность-токена) ____ Запаковка в хранилище ключей ```sh openssl pkcs12 -export \ -in authorization.crt \ -inkey authorization.key \ -out keystore.p12 \ -name tomcat \ -CAfile authorization-ca.crt \ -caname root \ -password pass:MFNX344yh4 ``` 📖 Расшифровка аргументов: | Параметр | Назначение | |---------------------------------|---------------------------------------------------------------------------------------------| | `openssl pkcs12` | Утилита OpenSSL, работающая с PKCS#12 контейнерами (включают сертификаты и ключи). | | `-export` | Указывает, что нужно экспортировать (создать) PKCS#12-файл. | | `-in authorization.crt` | Основной (публичный) сертификат. Это то, что выдано для твоего домена. | | `-inkey authorization.key` | Приватный ключ, соответствующий сертификату. Нужен для использования сертификата. | | `-out keystore.p12` | Выходной файл (итоговый контейнер PKCS#12). Это будет твой `keystore`. | | `-name tomcat` | Алиас (имя) для ключа в хранилище. Spring Boot (и Tomcat) по умолчанию ищет alias `tomcat`. | | `-CAfile authorization-ca.crt` | (Необязательно) Цепочка доверенных сертификатов (например, корневой и промежуточные CA). | | `-caname root` | Имя для CA-сертификата (используется внутри контейнера). | | `-password pass: XXXXXX` | Пароль для защиты хранилища (в Spring Boot это `key-store-password`). | ### Получить токен для защиты от CSRF атак https://istransit.kz/api/authorization/v02/get_request_token GET запрос без данных. Пример ответа: ```json { "ttl":600, "token":"VTf8zvHKqK7QFJ0ZEyheOYAUrI7cRIbejxMzRKlMzYM" } ``` ### Получить список разрешений для пользователя по Access token https://istransit.kz/api/authorization/v02/access/ Запрос может содержать параметры фильтрации для поиска частичного совпадения названия (действия), если параметров фильтрации нет или он равен null то вернёт все записи. Пример запроса: ```json { "action_name":"arm_" } ``` Пример ответа: ```json { "error_code": 0, "error_message": "", "data": [ "arm_accounting", "arm_carrier", "arm_hr"] } ``` ### Получить CAPTCHA с проверочным токеном https://istransit.kz/api/authorization/v02/captcha/ Пример запроса: ```json { "email":"test@mail.ru" } ``` Пример ответа: ```json { "image":"тут gif в base64", "token":"ZUROMC9xQVpRNjVGZGZBSWdrSGk5NHlPK2JXcHJMHVlbWVBPT0=.ywHb5zzI+ARK3XDRpgVkC1fdlqEQWWOXLuVIu\/rRMho=" } ``` Где "image" это рисунок в base64 А "token" это токен для последующей проверки введённого кода "code":"XXXXXX". По умолчанию токен captcha действует 10 минут. ### Создать нового пользователя https://istransit.kz/api/authorization/v02/create/ Письмо с паролем придёт на почту Пример запроса: ```json5 { "country_id": "1", "company_name": "ТОО 'Тестовая компания'", "position": "Менеджер", "name": "Берик", "surname": "Султанов", "patronymic": "Серикович", "phone": "+7777123456", "email": "test@test.kz", "code":"11111", //Код с CAPTCHA "token":"ZUROMC9xQVpRNjVGZGZBSdyc2JIV0ZueHdDMHVlbWVBPT0=.ywHb5zzI+ARK3XDRpgVkC1fdlqEQWWOXLuVIu\/rRMho=" //Токен с CAPTCHA } ``` Пример ответа: ```json { "error_code": "0", "error_message":"" } ``` ### Получить информацию о пользователе по его Access token https://istransit.kz/api/authorization/v02/info/ Запрос: ``` Cookie: jwt_a = Access token ``` Пример ответа: ```json5 { "error_code": "0", "error_message": "", "name": "Igor", "surname": "M", "patronymic": "I", "roles": "Кассир, Кладовщик", "time": "1703838784", //Время с сервера "expiration": "1696924443", //Когда "протухнет" пароль "appid": "postman", "arm": "monitoring" } ``` ### Авторизоваться https://istransit.kz/api/authorization/v02/login/ Пример запроса: ```json { "login" : "test@istt.kz", "password" : "test", "totp": "123456", "appid" : "postman" } ``` В ответ: ```json5 { "error_code": "0", "error_message": "", "name": "Igor", "surname": "M", "patronymic": "I", "roles": "Кассир, Кладовщик", "time": "1703838784", //Время с сервера "expiration": "1696924443", //Когда протухает пароль "appid": "postman", "arm": "monitoring" } ``` Также в ответ Cookie: ``` Cookie: jwt_a = Access token Cookie: jwt_r = Refresh token ``` ### Обновить токен доступа (а также обновить рефреш токен) https://istransit.kz/api/authorization/v02/refresh/ В запросе Cookie: ``` Cookie: jwt_a = Access token Cookie: jwt_r = Refresh token ``` Пример ответа: ```json { "error_code": "0", "error_message":"" } ``` Также в ответе Cookie: ``` Cookie: jwt_a = Access token Cookie: jwt_r = Refresh token ``` ### Ссылка для подтверждения смены пароля (переходят на неё из почты) https://istransit.kz/api/authorization/v02/reset/ Пример запроса: ```html https://istransit.kz/api/authorization/v02/reset/?token=xxxxx&lng=1 ``` В ответ HTML страница с результатом на 7 секунд, с переходом на главную страницу: ```html

Описание результата

``` ### Принять капчу и код для инициализации процедуры восстановления пароля https://istransit.kz/api/authorization/v02/restore/ Пример запроса: ```json { "code":"11111", "token":"ZUROMC9xQVpRNjVGZGZBSdyc2JIV0ZueHdDMHVlbWVBPT0=.ywHb5zzI+ARK3XDRpgVkC1fdlqEQWWOXLuVIu\/rRMho=" } ``` Код и токен из captcha Пример ответа: ```json { "error_code": "0", "error_message":"" } ``` ### Обновить пароль по логину и старому паролю https://istransit.kz/api/authorization/v02/update/ Для этой функции авторизация пользователя не обязательна, а значит пользователя можно не авторизовывать если у него просрочен пароль. В новом пароле должно быть цифра, большая латинская буква, маленькая латинская буква, один спец символ и длина не менее 6 символов. Пример запроса: ```json { "login":"test@mail.ru", "password":"12345", "password_new":"54321" } ``` Пример ответа: ```json { "error_code": "0", "error_message":"" } ``` ### Проверить валидность токена доступа https://istransit.kz/api/authorization/v02/alive/ На вход Cookie с jwt_a токеном, на выход код ошибки. Пример ответа: ```json { "error_code": "0", "error_message":"" } ```