Unified Identity Management logo figure Unified Identity Management logo figure
Поиск Поиск по документации

External Authentication

Аутентификация в SSO через внешнюю систему

Схема аутентификации

Failed to generate image: Could not load PlantUML. Either require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable. Alternatively a PlantUML binary can be provided (plantuml-native in $PATH).
@startuml
autonumber
title Аутентификация пользователя по логину/паролю через SSO External JWT Login Module

' Actors
actor Пользователь as customer #3F9C35

participant "Личный кабинет\n(или другая закрытая страница)" as selfcare #7B7BC0

participant "SSO Server" as sso #F78F1E

participant "Authentication Service\n(система выполняющая аутентификацию)" as auth #F78F1E

' Use Case
note over customer, auth : Успешный вход пользователя в личный кабинет

customer -> selfcare : запрашивает страницу личного кабинета
            selfcare -> sso : запрашивает статус пользователя
            selfcare <- sso : отвечает, что пользователь не аутентифицирован
customer <-- selfcare : возвращает редирект на SSO

customer -> sso : происходит редирект
customer <-- sso : записывает в cookie URL для обратного перехода и возвращает редирект на сервис аутентификации

customer ->  auth : происходит редирект
customer <-  auth : возвращает страницу логина
customer --> auth :
customer <-- auth : происходит процесс аутентификации, завершается успешно
customer --> auth
             auth -> auth : генерирует токен JWT,\n записывает в cookie
customer <-- auth : возвращает редирект на SSO

customer -> sso : происходит редирект
            sso -> sso : проверяет токен JWT из cookie,\nдобавляет session cookie
customer <-- sso : возвращает редирект на страницу личного кабинета

customer -> selfcare : происходит редирект
            selfcare ->  sso : запрашивает статус пользователя по session cookie
            selfcare <- sso : отвечает, что пользователь аутентифицирован
customer <- selfcare : отображает содержимое личного кабинета



' Use Case
note over customer, auth : Неуспешный вход пользователя в личный кабинет

customer -> selfcare : запрашивает страницу личного кабинета
            selfcare -> sso : проверяет статус пользователя
            selfcare <- sso : отвечает, что пользователь не аутентифицирован
customer <-- selfcare : возвращает редирект на SSO

customer -> sso : происходит редирект
customer <-- sso : записывает в cookie URL для обратного перехода и возвращает редирект на сервис аутентификации

customer ->  auth : происходит редирект
customer <-  auth : возвращает страницу логина
customer --> auth
customer <-- auth : происходит процесс аутентификации, завершается неуспешно
customer --> auth
             auth -> auth : генерирует токен JWT,\n записывает в cookie
customer <-- auth : возвращает редирект на SSO

customer -> sso : происходит редирект
customer <-- sso : проверяет токен из cookie, возвращает редирект на сервис аутентификации с кодами ошибок

customer -> auth : происходит редирект
customer <- auth : возвращает страницу логина с ошибками


@enduml

Логин Модуль ExternalJwtLoginModule

Модуль делегирует процесс аутентификации некоторой внешней системе путем редиректа на ее адрес Внешняя система может использовать любую цепочку аутентификации, после чего результат отправить редиректом обратно в SSO

Интеграция

SSO → External Auth Service

Задать настройку com.rooxteam.federation.authentication.baseUrl входной точкой логина во внешней системе. по этому адресу будут приходить GET запросы для аутентификации.

External Auth Service → SSO

В случае успешной аутентификации нужно сохранить имя пользователя и справочную информацию в виде зашифрованного токена (JWT) и записать в cookie из настройки com.rooxteam.federation.authentication.cookie.name (по умолчанию iPlanetDirectoryPro), время жизни токена должно быть несколько секунд. В случае неуспешной аутентификации нужно передать токен без информации о пользователе. В cookie из com.rooxteam.federation.authentication.backUrlCookie (по умолчанию sso_goto) должен быть записан обраный URL SSO, к этому URL необходимо добавить GET-параметр из com.rooxteam.federation.authentication.backStatusParam (по умолчанию auth_status) о статусе аутентификации (SUCCESS) и по полученному URL выполнить редирект.

Настройки

  • com.rooxteam.federation.authentication.decryptor.key - Ключ расшифровки JWT токена

  • com.rooxteam.federation.authentication.baseUrl - URL внешней системы аутентификации

  • com.rooxteam.federation.authentication.backUrlCookie - Имя Cookie где находится URL для обратного редиректа в SSO

  • com.rooxteam.federation.authentication.backStatusParam - Имя GET-параметра, в который внешняя система должна передать статус аутентификации

  • com.rooxteam.federation.authentication.cookie.name - Имя Cookie в которой передается JWT

  • com.rooxteam.federation.authentication.cookie.domain - Домен Cookie в которой передается JWT

  • com.rooxteam.federation.authentication.cookie.path - Путь Cookie в которой передается JWT