SSO и протоколы аутентификации
Содержание
Single Sign-On (SSO)Single Logout (SLO)Поддерживаемые протоколыOpenID Connect (OIDC)OAuth 2.0SAML 2.0Руководство по выбору протоколаЖизненный цикл токеновSingle Sign-On (SSO)
Single Sign-On (SSO) — это механизм аутентификации, который позволяет пользователям войти один раз и получить доступ к нескольким приложениям без повторного ввода учетных данных. Keycloak реализует SSO с помощью браузерных сессионных cookie, ограниченных областью действия Realm.
Когда пользователь аутентифицируется в Keycloak:
- Keycloak устанавливает сессию и выдает сессионный cookie в браузере.
- При обращении пользователя к другому приложению, зарегистрированному в том же Realm, приложение перенаправляет пользователя в Keycloak.
- Keycloak обнаруживает существующий сессионный cookie и выдает новое токен приложению без запроса повторного входа пользователя.
SSO действует в пределах одного Realm. Пользователям необходимо аутентифицироваться отдельно в разных Realms.
Single Logout (SLO)
Keycloak также поддерживает Single Logout (SLO). При выходе пользователя из одного приложения Keycloak может распространить выход на все остальные приложения, использующие ту же сессию SSO, завершая все активные сессии одновременно.
Поддерживаемые протоколы
Keycloak поддерживает три основных протокола идентификации и авторизации:
OpenID Connect (OIDC)
OpenID Connect — современный уровень идентификации, построенный поверх OAuth 2.0. Это рекомендуемый протокол для большинства новых приложений.
Ключевые понятия:
Распространённые потоки OIDC, поддерживаемые Keycloak:
- Authorization Code Flow: стандартный поток для серверных веб-приложений. Клиент обменивает код авторизации на токены.
- Authorization Code Flow с PKCE: рекомендуемый поток для одностраничных приложений (SPA) и мобильных приложений. Добавляет проверку кода для защиты от атак перехвата.
- Client Credentials Flow: используется для взаимодействия машина-машина (M2M), когда пользователь не участвует.
- Device Authorization Flow: используется для устройств с ограниченными возможностями ввода (смарт-телевизоры, IoT-устройства).
OAuth 2.0
OAuth 2.0 — это фреймворк авторизации, позволяющий приложениям получать ограниченный доступ к учетным записям пользователей на сторонних сервисах. Keycloak выступает в роли Authorization Server в потоках OAuth 2.0.
Keycloak поддерживает все стандартные типы грантов OAuth 2.0:
SAML 2.0
Security Assertion Markup Language (SAML) 2.0 — это XML-протокол, широко используемый в корпоративной федерации идентичностей. Keycloak поддерживает SAML как Service Provider (SP), так и Identity Provider (IdP).
Распространённые сценарии использования SAML в Keycloak:
- Интеграция с корпоративными провайдерами идентичности (Active Directory Federation Services, Azure AD), использующими SAML.
- Обеспечение SSO для устаревших корпоративных приложений, поддерживающих только SAML.
Руководство по выбору протокола
Жизненный цикл токенов
Keycloak выдает токены с ограниченным временем действия. Время жизни токенов настраивается для каждого Realm:
Короткоживущие access токены снижают риск кражи токена. Приложения должны использовать refresh токен для прозрачного получения новых access токенов.