Руководтсво администратора/разработчика

Документация

Компоненты/сервисы

Сервис идентификация и управления доступом (IAM)

Сервис, позволяет авторизовывать (или использовать авторизационные данные от внешнего сервиса авторизации), генерировать токен-доступа, для получения доступа к другим сервисам без повторной аутентификации на каждом сервисе.


Для чего

Решает три задачи:

  1. Обеспечивает технологию единого входа (Single Sign-On, SSO) - это технология, позволяющая уже аутентифицированному (вошедшему в систему) пользователю получать доступ к другим сервисам без повторной аутентификации
  2. Реализует задачи сервера идентификации (Identity Server, IS) - идентификация авторизованных пользователей, управление токенами доступа;
  3. Реализует задачи сервиса управления доступом (Access management, AM).


Бизнес-логика работы сервиса

Пользователь может входить под одной учетной записью с различных устройств. Запрос пользователя должен быть обработан любым из запущенный копий сервиса (допускается неограниченное количество копий сервиса, запущенного на разных хостах (серверах).

  1. Auth (IAM) -> IAM
    Пользователь авторизуется через сервис Auth или непосдерственно IAM
    • Вход: Логин/пароль или вход через сторонние сервисы.
    • Выход: Ответ в формате ProfileData
  2. IAM
    1. Сервис производит аутентификацию пользователя (если пользователя нет в базе - добавляет)
    2. Сервис производит идентификацию пользователя (назначение прав пользователю)
    3. Сервис производит формирование пары токенов (доступа (access)/обновления (refresh)). Токен доступа передается пользователю в ответе на запрос.
    4. Access/Refresh-токены добавляются с массив актуальных токенов для текущего пользователя (ключ uid-пользователя) на IAM-сервисе
      Внимание! Токены доступа обновляются только запросы от сервисов.
  3. Сервисы
    1. В каждом запросе проверяет наличие токена и его актуальность.
    2. Если в массиве актуальных ключей для пользователя (по UID) нет ключа, то возможно пришел запрос от нового клиента пользователя (новое устройство) и необходимо запросить у IAM ключ обновления для текущего запроса.
      Если ключ обновления был получен, то добавляем (в локальный для каждого сервиса) массив актуальных ключей текущую пару доступ/обновление для данного UID-пользователя.
      Если ключ не был получен, значит необходимо сбросить все пары ключей для данного пользователя (IAM отзывает ключи для всех сессий пользователя).


Как работает

Полный цикл от момента авторизации до поступа к запрашиваемому ресурсу (в данном случае приложению через браузер) выглядит следующим образом:

  1. Пользователь авторизуется через сервис авторизаци Auth Buildbox (далее Auth) (форма авторизации может быть интегрирована в любой сайт)
  2. В случае, если Auth используется в качестве шлюза для авторизации через внешние ресурсы (Yandex, Google и тд) полученный ответ от внешних ресурсов после авторизации отправляется на IAM-сервис (далее IAM) с указанием данных полученного запроса, а также ресурса, к которому следует получить доступ.
  3. IAM проверяет права на доступ к указанному ресурсу (делая запросы на сервис API, указанные в настройках IAM), в случае успеха генерирует токен (с указанием списка ролей пользователя и списка ресурсов, доступ к которым разрешен) и отправляет обратно сервису Auth
  4. Auth возвращаем полученный токен и URL-callback.
  5. Браузер идет по указанному URL-callback сервиса где происходит чтение токена из GET-запроса и создание Cookie в браузере пользователя для доменного имени сервиса (приложения)
  6. Происходит редирект на запрашиваемый адрес.

В App-сервисе указывается адрес Auth-сервиса (на форме которого будет происходить аутентификация). 

В Auth-сервисе указывается адрес SSO-сервиса, на котором будет происходить авторизации/идентификация пользователя.

В IAM-сервисе указывается адрес API-сервиса, в котором хранится база пользователей.