Аутентификация с Microsoft Active Directory

Аутентификация в REST API возможна через контроллер домена Microsoft Active Directory.

СРК поддерживает интеграцию с Microsoft Active Directory версий 2012 R2 или 2016, развернутой на Microsoft Windows Server 2016.

Предварительные условия для аутентификации через контроллер домена
  1. Настроен контроллер домена Microsoft Active Directory. В контроллере домена существует хотя бы одна группа, в которой есть хотя бы один пользователь.

  2. В СРК настроено соединение с контроллером домена Microsoft Active Directory.

  3. В СРК создана ассоциация групп RuBackup и ролей MS Active Directory.

Подробнее о настройке контроллера домена MS Active Directory — в «Интеграция RuBackup со средствами управления доменом Microsoft Active Directory».

1. Выпуск access_token, refresh_token и csrf_token через браузер

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

Для примера будут использованы следующие данные MS AD:

  • Группа контроллера домена: test_group

  • Пользователь контроллера домена : testuser

  • Роль группы: Супервайзер

  • Домен: RUBACKUP

  • Пароль пользователя в конроллере: P@ssw0rd

Для выпуска пары токенов:

  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$1000000000000431000002BDFD3D653D2305E36A
Рисунок 2. Заполнение payload авторизационными данными

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

image$1000000000000423000001CC24DE1AAE03CE08EB
Рисунок 3. Ответ сервера

В параметре role будет возвращена роль пользователя, которая соответствует роли группы, в которой находится пользователь. Роль группы определяется через ассоциацию групп и ролей. Подробнее о создании ассоциации — в «Интеграция RuBackup со средствами управления доменом Microsoft Active Directory».

2. Выпуск access_token, refresh_token и csrf_token в командной строке

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

Для примера будут использованы следующие данные MS AD:

  • Группа контроллера домена: test_group

  • Пользователь контроллера домена : testuser

  • Роль группы: Супервйзер

  • Домен: RUBACKUP

  • Пароль пользователя в конроллере: P@ssw0rd

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

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

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

{
  "data": {
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTczNDAxNDMzNCwianRpIjoiZWRjYzY0NzItYTdhOC00MmQ5LWIxNmMtMWE4NzQ2ZTI5NWNkIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6Il9tc19hZF90ZXN0dXNlcl9ydWJhY2t1cCIsIm5iZiI6MTczNDAxNDMzNCwiY3NyZiI6IjE0OGZmMTk4LWM2N2UtNDA5OC1hNzAyLWJlYjhhMTRjN2RmNCIsImV4cCI6MTczNDAxNTIzNCwiZmFtaWx5IjoiaHp0Z3hkcWFobmxncWdidCJ9.5YU2yxGZshimv6kqqgvP-t6ynnhfVxDhlGurcXFHg0s",
    "csrf_token": "148ff198-c67e-4098-a702-beb8a14c7df4",
    "last_fail_login": null,
    "last_success_login": "2024-12-12T17:13:08.305226",
    "package_version": "<Версия пакетов>",
    "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTczNDAxNDMzNCwianRpIjoiNTVjYTEzZDQtYzIwMi00MmIxLTlkZjItNDI4MWIwZWRmNGY0IiwidHlwZSI6InJlZnJlc2giLCJzdWIiOiJfbXNfYWRfdGVzdHVzZXJfcnViYWNrdXAiLCJuYmYiOjE3MzQwMTQzMzQsImNzcmYiOiIxNDhmZjE5OC1jNjdlLTQwOTgtYTcwMi1iZWI4YTE0YzdkZjQiLCJleHAiOjE3MzQxMDA3MzQsImZhbWlseSI6Imh6dGd4ZHFhaG5sZ3FnYnQifQ.YRP9Ega1xZbpln56vNzSZWC8LzubabdAFdExD-F3BZQ",
    "role": [
      "supervisor"
    ],
    "rubackup_server_address": "10.177.xxx.xxx",
    "user_name": "_ms_ad_testuser_rubackup"
  },
  "errors": {},
  "is_error": false,
  "message": ""
}

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

curl -k -X --cookie-jar - POST 'https://api.rubackup.local:5656/api/v1/auth/login' \ (1)
--header 'Content-Type: application/json' \
--data '{
 "rubackup_database": "rubackup",
 "rubackup_user": "testuser",
 "password": "P@ssw0rd",
 "auth_type": "domain",
 "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