Краткий ответ: SAML spe c позволяет Single Logout (SLO) вести себя так, как вы хотите, но типичная реализация не такая уж сложная.
Из SAML Profiles spe c, раздел 4.4 (Single Logout Profile):
Как только принципал аутентифицирован для провайдера идентификации, аутентифицирующий объект может установить sh сеанс с принципалом (обычно с помощью «Повар» ie, перезапись URL-адреса или другое, определяемое реализацией c означает). Поставщик удостоверений может впоследствии выдавать утверждения поставщикам услуг или другим проверяющим сторонам на основании этого события аутентификации; доверяющая сторона может использовать это для установления sh своего собственного сеанса с принципалом. В такой ситуации провайдер идентификации может действовать как администратор сеанса , а проверяющие стороны - участники сеанса .
Если последовательность SLO должна была быть По инициативе одного из участников сессии все это обсуждение будет спорным. Спецификация c требует, чтобы участник сеанса идентифицировал, что «общий» сеанс завершается с помощью уникального идентификатора (он же индекс сеанса ), который был первоначально отправлен участнику сеанса провайдером идентификации. В соответствии с требованием spe c, этот идентификатор будет отличаться в вашем сеансе SP № 1 от сеанса SP № 2.
... но когда последовательность SLO инициируется IdP, ваш сценарий возможен , В разделе 4.4.4.1 говорится о правилах выдачи и обработки <LogoutRequest>
:
Если запрашивающая сторона является участником сеанса, она ДОЛЖНА включить в запрос как минимум один элемент <SessionIndex>
. [...] Если запрашивающая сторона является администратором сеанса (или действует от его имени), то МОЖЕТ опустить любые такие элементы, чтобы указать прекращение всех применимых сеансов принципала
Перевод: если Вы могли бы как-то сказать IdP выдать <LogoutRequest>
без <SessionIndex>
и , ваш SP достаточно опытен, чтобы правильно интерпретировать такой запрос и SP может завершить все сеансы для определенного пользователь через свой бэкэнд, значит, вы выиграли.
На самом деле комбинация условий выше - очень высокий порядок. Из коробки большинство IdP не будет выдавать <LogoutRequest>
без <SessionIndex>
. Очень немногие SP, которые даже беспокоятся о реализации SLO, не примут запрос без <SessionIndex>
. В крайне редком случае, когда вы сможете найти правильный <LogoutRequest>
, и SP не захлебнется им, вам очень, очень повезет, если SP правильно определит все сеансы, инициированные IdP, и будет возможность завершить их через бэкэнд.