Руководтсво администратора/разработчика
Документация
Компоненты/сервисы
Сервис идентификация и управления доступом (IAM)
Сервис, позволяет авторизовывать (или использовать авторизационные данные от внешнего сервиса авторизации), генерировать токен-доступа, для получения доступа к другим сервисам без повторной аутентификации на каждом сервисе.
Для чего
Решает три задачи:
- Обеспечивает технологию единого входа (Single Sign-On, SSO) - это технология, позволяющая уже аутентифицированному (вошедшему в систему) пользователю получать доступ к другим сервисам без повторной аутентификации
- Реализует задачи сервера идентификации (Identity Server, IS) - идентификация авторизованных пользователей, управление токенами доступа;
- Реализует задачи сервиса управления доступом (Access management, AM).
Бизнес-логика работы сервиса
Пользователь может входить под одной учетной записью с различных устройств. Запрос пользователя должен быть обработан любым из запущенный копий сервиса (допускается неограниченное количество копий сервиса, запущенного на разных хостах (серверах).
- Auth (IAM) -> IAM
Пользователь авторизуется через сервис Auth или непосдерственно IAM- Вход: Логин/пароль или вход через сторонние сервисы.
- Выход: Ответ в формате ProfileData
- IAM
- Сервис производит аутентификацию пользователя (если пользователя нет в базе - добавляет)
- Сервис производит идентификацию пользователя (назначение прав пользователю)
- Сервис производит формирование пары токенов (доступа (access)/обновления (refresh)). Токен доступа передается пользователю в ответе на запрос.
- Access/Refresh-токены добавляются с массив актуальных токенов для текущего пользователя (ключ uid-пользователя) на IAM-сервисе
Внимание! Токены доступа обновляются только запросы от сервисов.
- Сервисы
- В каждом запросе проверяет наличие токена и его актуальность.
- Если в массиве актуальных ключей для пользователя (по UID) нет ключа, то возможно пришел запрос от нового клиента пользователя (новое устройство) и необходимо запросить у IAM ключ обновления для текущего запроса.
Если ключ обновления был получен, то добавляем (в локальный для каждого сервиса) массив актуальных ключей текущую пару доступ/обновление для данного UID-пользователя.
Если ключ не был получен, значит необходимо сбросить все пары ключей для данного пользователя (IAM отзывает ключи для всех сессий пользователя).
Как работает
Полный цикл от момента авторизации до поступа к запрашиваемому ресурсу (в данном случае приложению через браузер) выглядит следующим образом:
- Пользователь авторизуется через сервис авторизаци Auth Buildbox (далее Auth) (форма авторизации может быть интегрирована в любой сайт)
- В случае, если Auth используется в качестве шлюза для авторизации через внешние ресурсы (Yandex, Google и тд) полученный ответ от внешних ресурсов после авторизации отправляется на IAM-сервис (далее IAM) с указанием данных полученного запроса, а также ресурса, к которому следует получить доступ.
- IAM проверяет права на доступ к указанному ресурсу (делая запросы на сервис API, указанные в настройках IAM), в случае успеха генерирует токен (с указанием списка ролей пользователя и списка ресурсов, доступ к которым разрешен) и отправляет обратно сервису Auth
- Auth возвращаем полученный токен и URL-callback.
- Браузер идет по указанному URL-callback сервиса где происходит чтение токена из GET-запроса и создание Cookie в браузере пользователя для доменного имени сервиса (приложения)
- Происходит редирект на запрашиваемый адрес.
В App-сервисе указывается адрес Auth-сервиса (на форме которого будет происходить аутентификация).
В Auth-сервисе указывается адрес SSO-сервиса, на котором будет происходить авторизации/идентификация пользователя.
В IAM-сервисе указывается адрес API-сервиса, в котором хранится база пользователей.