О компоненте
Сервис IAM (Identity and Access Management) (услуга 1.13) — набор инструментов для аутентификации и авторизации пользователей в прикладных приложениях.
Компонент «Аутентификация Platform V IAM» отвечает за процессы аутентификации и включает в себя:
- IAM Proxy;
- IAM (Keycloak).
IAM Proxy — сборка прокси-сервера nginx, обеспечивающая аутентифицированный доступ к ресурсам. Через IAM Proxy проходит весь трафик, в том числе и до ресурсов, не требующих аутентификации.
Функции IAM Proxy:
- первичная аутентификация на основе ролей, получаемых из токена;
- обогащение сессии параметрами аутентификации — конвертация аутентификационных данных в метаданные запроса.
IAM (Keycloak) — компонент для аутентификации и авторизации пользователей на базе open-source версии Keycloak 16.1. Представляет собой хранилище учетных записей и информации о пользователях.
Функции Keycloak:
- аутентификация пользователей;
- поддержка сценариев в рамках отраслевых протоколов: OpenID Connect, Oauth 2.0, SAML 2.0, User Managed Access (UMA);
- хранение данных аутентификационных пользователей;
- администрирование учетных записей.
В процессах аутентификации задействованы компоненты IAM Proxy и IAM (Keycloak).
Когда пользователь отправляет через браузер запрос в прикладной сервис, этот запрос попадает в IAM Proxy — шлюз безопасности, гарантирующий аутентификацию каждого проходящего через него запроса. Признак аутентификаци определяется наличием сессионных данных:
Если сессионных данных нетcookie PLATFORM_SESSION
.IAM Proxy направляет пользователя на аутентификацию в Keycloak — хранилище учетных записей и информации о пользователях. Пользователи проходят аутентификацию по логину и паролю или через внешнего поставщика учетных записей (например, ЕСИА).
Keycloak передает ключ для сессионных данных
cookie PLATFORM_SESSION
и ссылкой на редирект в IAM Proxy с авторизационным кодом для завершения аутентификации. В Keycloak авторизационный код обменивается на id-, access- и refresh-токены JWT. Если пользователь прошел аутентификацию через ЕСИА, в ключ
organization
access-токена добавляется или информация о выбранной организации, или значение 0
, если пользователь вошел в систему как физическое лицо.После успешной аутентификации пользователя запрос проксируется в прикладное приложение.
Если сессионные данные естьЗапрос проксируется в прикладное приложение, где проверяется валидность JWT-токена с использованием библиотеки для соответствующего языка программирования. Проверка упрощается Платформенным фильтром JWT: в его конфигурации указывается маска, которой должен соответствовать адрес Keycloak из поля
iss
JWT-токена: /auth/realms/{REALM}
. В части {REALM}
указывается имя реалма (Realm).Realm — область для управления каталогами пользователей, привилегий, ролей и групп. Каждый пользователь принадлежит конкретной области, в рамках которой проходит аутентификацию. Области изолированы друг от друга и аутентифицируют только тех пользователей, которые им принадлежат.
Если адрес Keycloak соответствует маске, в прикладное приложение возвращается публичный ключ для проверки JWT-токена. После проверки токена роль пользователя из Keycloak/ЕСИА сопоставляется с привилегиями в Объединенном сервисе авторизации (ОСА).
Подробнее об авторизации: «Авторизация в прикладном приложении».