2025-03-23 15:13:38 +05:00
2024-12-09 19:24:12 +06:00
2025-03-23 15:13:38 +05:00
2025-03-03 09:14:30 +05:00
+
2025-03-11 07:32:27 +05:00
+
2025-03-11 07:32:27 +05:00
2024-12-09 19:24:12 +06:00
2024-12-09 19:24:12 +06:00
+
2025-03-06 16:51:07 +05:00
2024-12-09 19:24:12 +06:00

Описание функций авторизации


Алгоритм

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
  2. Получить CAPTCHA с проверочным токеном
  3. Создать нового пользователя
  4. Получить информацию о пользователе по его Access token
  5. Авторизоваться
  6. Обновить токен доступа (а также обновить рефреш токен)
  7. Ссылка для подтверждения смены пароля (переходят на неё из почты)
  8. Принять капчу и код для инициализации процедуры восстановления пароля
  9. Обновить пароль по логину и старому паролю
  10. Проверить валидность токена

Получить список разрешений для пользователя по Access token

https://istransit.kz/api/authorization/v02/access/

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

Пример запроса:

{
    "action_name":"arm_"
}

Пример ответа:

{
  "error_code": 0,
  "error_message": "",
  "data": [
  "arm_accounting",
  "arm_carrier",
  "arm_hr"]
}

Получить CAPTCHA с проверочным токеном

https://istransit.kz/api/authorization/v02/captcha/

Пример запроса:

{
    "email":"test@mail.ru"
}

Пример ответа:

{
    "image":"тут gif в base64",
    "token":"ZUROMC9xQVpRNjVGZGZBSWdrSGk5NHlPK2JXcHJMHVlbWVBPT0=.ywHb5zzI+ARK3XDRpgVkC1fdlqEQWWOXLuVIu\/rRMho="
}

Где "image" это рисунок в base64

А "token" это токен для последующей проверки введённого кода "code":"XXXXXX".

По умолчанию токен captcha действует 10 минут.

Создать нового пользователя

https://istransit.kz/api/authorization/v02/create/

Письмо с паролем придёт на почту

Пример запроса:

{
   "country_id": "1",
   "company_name": "ТОО 'Тестовая компания'",
   "position": "Менеджер",
   "name": "Берик",
   "surname": "Султанов",
   "patronymic": "Серикович",
   "phone": "+7777123456",
   "email": "test@test.kz",
   "code":"11111", //Код с CAPTCHA
   "token":"ZUROMC9xQVpRNjVGZGZBSdyc2JIV0ZueHdDMHVlbWVBPT0=.ywHb5zzI+ARK3XDRpgVkC1fdlqEQWWOXLuVIu\/rRMho=" //Токен с CAPTCHA
}

Пример ответа:

{
  "error_code": "0",
  "error_message":""
}

Получить информацию о пользователе по его Access token

https://istransit.kz/api/authorization/v02/info/

Запрос:

Cookie: jwt_a = Access token 

Пример ответа:

{
    "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/

Пример запроса:

{
  "login" : "test@istt.kz",
  "password" : "test",
  "totp": "123456",
  "appid" : "postman"
}

В ответ:

{
    "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 

Пример ответа:

{
  "error_code": "0",
  "error_message":""
}

Также в ответе Cookie:

Cookie: jwt_a = Access token
Cookie: jwt_r = Refresh token 

Ссылка для подтверждения смены пароля (переходят на неё из почты)

https://istransit.kz/api/authorization/v02/reset/

Пример запроса:

https://istransit.kz/api/authorization/v02/reset/?token=xxxxx&lng=1

В ответ HTML страница с результатом на 7 секунд, с переходом на главную страницу:

<!DOCTYPE html>
<html lang="ru">
    <head>
        <title></title>
        <meta http-equiv="refresh" content="7; url='https://aistransit.kz'" />
    </head>
    <body>
        <h1>Описание результата</h1>
    </body>
</html>

Принять капчу и код для инициализации процедуры восстановления пароля

https://istransit.kz/api/authorization/v02/restore/

Пример запроса:

{
  "code":"11111",
  "token":"ZUROMC9xQVpRNjVGZGZBSdyc2JIV0ZueHdDMHVlbWVBPT0=.ywHb5zzI+ARK3XDRpgVkC1fdlqEQWWOXLuVIu\/rRMho="
}

Код и токен из captcha

Пример ответа:

{
  "error_code": "0",
  "error_message":""
}

Обновить пароль по логину и старому паролю

https://istransit.kz/api/authorization/v02/update/

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

В новом пароле должно быть цифра, большая латинская буква, маленькая латинская буква, один спец символ и длина не менее 6 символов.

Пример запроса:

{
  "login":"test@mail.ru",
  "password":"12345",
  "password_new":"54321"
}

Пример ответа:

{
  "error_code": "0",
  "error_message":""
}

Проверить валидность токена доступа

https://istransit.kz/api/authorization/v02/alive/

На вход Cookie с jwt_a токеном, на выход код ошибки.

Пример ответа:

{
  "error_code": "0",
  "error_message":""
}
Description
No description provided
Readme 299 KiB
Languages
Java 96.6%
Python 3%
Dockerfile 0.4%