• Русский
  • SSO и протоколы аутентификации

    Single Sign-On (SSO)

    Single Sign-On (SSO) — это механизм аутентификации, который позволяет пользователям войти один раз и получить доступ к нескольким приложениям без повторного ввода учетных данных. Keycloak реализует SSO с помощью браузерных сессионных cookie, ограниченных областью действия Realm.

    Когда пользователь аутентифицируется в Keycloak:

    1. Keycloak устанавливает сессию и выдает сессионный cookie в браузере.
    2. При обращении пользователя к другому приложению, зарегистрированному в том же Realm, приложение перенаправляет пользователя в Keycloak.
    3. Keycloak обнаруживает существующий сессионный cookie и выдает новое токен приложению без запроса повторного входа пользователя.

    SSO действует в пределах одного Realm. Пользователям необходимо аутентифицироваться отдельно в разных Realms.

    Single Logout (SLO)

    Keycloak также поддерживает Single Logout (SLO). При выходе пользователя из одного приложения Keycloak может распространить выход на все остальные приложения, использующие ту же сессию SSO, завершая все активные сессии одновременно.

    Поддерживаемые протоколы

    Keycloak поддерживает три основных протокола идентификации и авторизации:

    OpenID Connect (OIDC)

    OpenID Connect — современный уровень идентификации, построенный поверх OAuth 2.0. Это рекомендуемый протокол для большинства новых приложений.

    Ключевые понятия:

    ПонятиеОписание
    ID TokenJSON Web Token (JWT), содержащий утверждения об идентичности аутентифицированного пользователя
    Access TokenТокен, предоставляющий доступ к защищенному ресурсу или API
    Refresh TokenДолговременный токен, используемый для получения новых access токенов без повторной аутентификации
    UserInfo EndpointЗащищённая конечная точка, возвращающая утверждения об аутентифицированном пользователе

    Распространённые потоки 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:

    Тип грантаСценарий использования
    authorization_codeВеб- и мобильные приложения с участием пользователя
    client_credentialsАутентификация сервис-сервис
    refresh_tokenПолучение новых access токенов с помощью refresh токена
    device_codeУстройства без браузера или с ограниченным вводом

    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.

    Руководство по выбору протокола

    СценарийРекомендуемый протокол
    Новое веб-приложениеOpenID Connect (Authorization Code + PKCE)
    Одностраничное приложение (SPA)OpenID Connect (Authorization Code + PKCE)
    Мобильное приложениеOpenID Connect (Authorization Code + PKCE)
    Микросервис / доступ к APIOAuth 2.0 (Client Credentials)
    Устаревшее корпоративное приложениеSAML 2.0
    IoT / умное устройствоOpenID Connect (Device Authorization Flow)

    Жизненный цикл токенов

    Keycloak выдает токены с ограниченным временем действия. Время жизни токенов настраивается для каждого Realm:

    Тип токенаВремя жизни по умолчаниюКонфигурация
    Access Token5 минутaccessTokenLifespan
    Refresh Token30 минут (привязан к сессии)ssoSessionMaxLifespan
    ID Token5 минутТо же, что и access token

    Короткоживущие access токены снижают риск кражи токена. Приложения должны использовать refresh токен для прозрачного получения новых access токенов.