Выпуск токенов

Перед тем как пользователь сможет обратиться к ресурсам сервера RuBackup, он должен пройти аутентификацию и получить токены доступа: access_token, refresh_token и csrf_token.

Сгенерированный access_token будет действовать в течение 15 минут с момента получения, refresh_token — 24 часа с момента получения, csrf_token действует до перезагрузки сервиса rubackup_api.

По истечении срока жизни access_token его можно перевыпустить с помощью refresh_token. Если истек срок жизни refresh_token, необходимо перевыпустить новую пару токенов с помощью логина и пароля. После перезапуска rubackup_api также необходимо перевыпустить новую пару токенов с помощью логина и пароля.

1. Выпуск токенов в браузере

  1. Перейдите по адресу https://<app_host>:<app_port>/api/v1/ (Рисунок 1):

image$10000000000005C900000200BB6386A5
Рисунок 1. Внешний вид Swagger
  1. Перейдите на вкладку «Auth» и выберите эндпоинт /auth/login.

  2. Нажмите кнопку «Try it out», заполните payload актуальными данными и нажмите «Execute» (Рисунок 2):

image$10000000000004CB000002F42A6936323A564566
Рисунок 2. Заполнение payload авторизационными данными

В результате проделанных операций будут получены access_token, refresh_token и csrf_token, а также сопутствующая информация о пользователе прошедшем авторизацию (Рисунок 3). Также сервис автоматически разместит access_token и refresh_token в cookie-файлах.

image$1000000000000463000001F51CE959FAAAF8B948
Рисунок 3. Ответ сервера с выпущенными токенами
Об авторизации через auth_type: domain — в Аутентификация с Microsoft Active Directory.

2. Выпуск токенов в командной строке

Чтобы произвести выпуск пары токенов через терминал, необходимо отправить POST-запрос с помощью консольной утилиты curl или любым другим удобным способом. В данном примере используется curl:

curl -k -X POST 'https://api.rubackup.local:5656/api/v1/auth/login' \ (1) (2) (3)
  -H 'accept: application/json' \ (4)
  -H 'Content-Type: application/json' \ (4)
  -d '{
  "rubackup_database": "rubackup", \ (5)
  "rubackup_user": "rubackup", \ (6)
  "password": "Testing12345", \ (7)
  "auth_type": "database", \ (8)
  "domain": "rubackup" (9)
}'
1 https://api.rubackup.local — адрес, где запущен rubackup_api
2 5656 - порт, который будет использоваться как часть адреса сервера API
3 /api/v1/auth/login — путь до запроса на авторизацию
4 -H <argument> - значения, передаваемые в заголовках
5 rubackup_database — имя служебной базы данных
6 rubackup_user — имя суперпользователя
7 password — пароль суперпользователя
8 auth_type — тип аутентификации (база данных или контроллер домена)
9 domain — домен для авторизации через контроллер домена

Результат вернётся в формате JSON:

{
  "data": {
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTcxNTE1ODc2MCwianRpIjoiNThjZjQ5MDAtZjE5Ni00OTZlLThkZjQtMThmZjlhY2M3Y2QxIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6InJ1YmFja3VwIiwibmJmIjoxNzE1MTU4NzYwLCJjc3JmIjoiNGM4YzM0NTctNDAwNS00YzZiLTk2MWMtMGM1MDU5NjcxZTA2IiwiZXhwIjoxNzE1MTU5NjYwLCJmYW1pbHkiOiJ4cnByeHR3ZHJyZ3FsamN4In0.VK5K6v-0_NxSx42bU5dEMIQAYYzxn-GTxmbjhxXjYSs",
    "csrf_token": "4c8c3457-4005-4c6b-961c-0c5059671e06",
    "csrf_token": "148ff198-c67e-4098-a702-beb8a14c7df4",
    "last_fail_login": "2024-12-11T17:39:43.564638",
    "last_success_login": "2024-12-11T17:40:07.036618",
    "package_version": "<версия пакетов>",
    "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTcxNTE1ODc2MCwianRpIjoiOTUzZjAxZWYtMTM4Zi00Y2ZhLTg4ODItNGI0NWQ0N2YxM2I2IiwidHlwZSI6InJlZnJlc2giLCJzdWIiOiJydWJhY2t1cCIsIm5iZiI6MTcxNTE1ODc2MCwiY3NyZiI6IjRjOGMzNDU3LTQwMDUtNGM2Yi05NjFjLTBjNTA1OTY3MWUwNiIsImV4cCI6MTcxNTI0NTE2MCwiZmFtaWx5IjoieHJwcnh0d2RycmdxbGpjeCJ9.7TmdI0Cmm4knApNINDoYJuJIYdRlzuuc1hS-1c4Y8Ws",
    "role": [
      "superuser"
    ],
    "rubackup_server_address": "10.177.xx.xxx",
    "user_name": "rubackup"
  },
  "errors": {},
  "is_error": false,
  "message": ""
}

Если необходимо получить еще и access_token и refresh_token из cookies, то curl следует передать опцию --cookie-jar -, например:

curl -k --cookie-jar - -X POST 'https://api.rubackup.local:5656/api/v1/auth/login' \ (1)
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "rubackup_database": "rubackup", \
  "rubackup_user": "rubackup", \
  "password": "Testing12345", \
  "auth_type": "database", \
  "domain": "rubackup"
}'
1 Добавлена опция --cookie-jar -

С этой опцией к выводу добавится следующая информация:

#HttpOnly.rubackup.local FALSE / TRUE 0 refresh_token_cookie
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTcxNTE2MDUzNywianRpIjoiYzM4MTE0N2YtNDI0MS00Y2NjLTlhZjYtNDcwODAxMWFmOTRjIiwidHlwZSI6InJlZnJlc2giLCJzdWIiOiJydWJhY2t1cCIsIm5iZiI6MTcxNTE2MDUzNywiY3NyZiI6IjRjOGMzNDU3LTQwMDUtNGM2Yi05NjFjLTBjNTA1OTY3MWUwNiIsImV4cCI6MTcxNTI0NjkzNywiZmFtaWx5IjoieXRqemR4dG1xd212bHlyayJ9.g0aFkoob7jAwZ5Bv6FzbOPo3_Q6y-vBpASqXXk19tyw

#HttpOnly.rubackup.local FALSE / TRUE 0 access_token_cookie
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTcxNTE2MDUzNywianRpIjoiODhmNDI0N2QtNjJlMy00ZjFjLTk4NzgtNDY4OTM2YjRlNTJmIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6InJ1YmFja3VwIiwibmJmIjoxNzE1MTYwNTM3LCJjc3JmIjoiNGM4YzM0NTctNDAwNS00YzZiLTk2MWMtMGM1MDU5NjcxZTA2IiwiZXhwIjoxNzE1MTYxNDM3LCJmYW1pbHkiOiJ5dGp6ZHh0bXF3bXZseXJrIn0.nj-UbudgyYqGmopRpK9du9gPaZcn_j0_5yhp0A5DLw8