Files
org.ccalm.jwt/README.md
2025-02-26 09:12:45 +05:00

257 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Описание функций авторизации
____
#### Алгоритм
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
____
## Оглавление
1. [Получить список разрешений для пользователя по Access token](#получить-список-разрешений-для-пользователя-по-Access-token)
2. [Получить CAPTCHA с проверочным токеном](#получить-captcha-с-проверочным-токеном)
3. [Создать нового пользователя](#создать-нового-пользователя)
4. [Получить информацию о пользователе по его Access token ](#получить-информацию-о-пользователе-по-его-access-token )
5. [Авторизоваться](#авторизоваться)
6. [Обновить токен доступа (а также обновить рефреш токен)](#обновить-токен-доступа-а-также-обновить-рефреш-токен)
7. [Ссылка для подтверждения смены пароля (переходят на неё из почты)](#ссылка-для-подтверждения-смены-пароля-переходят-на-неё-из-почты)
8. [Принять капчу и код для инициализации процедуры восстановления пароля](#принять-капчу-и-код-для-инициализации-процедуры-восстановления-пароля)
9. [Обновить пароль по логину и старому паролю](#обновить-пароль-по-логину-и-старому-паролю)
10. [Проверить валидность токена](#проверить-валидность-токена)
____
### Получить список разрешений для пользователя по 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
<!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/
Пример запроса:
```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":""
}
```