257 lines
8.8 KiB
Markdown
257 lines
8.8 KiB
Markdown
# Описание функций авторизации
|
||
____
|
||
#### Алгоритм
|
||
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":""
|
||
}
|
||
``` |