Как отправить текущий URL как состояние ретранслятора при отправке запроса на аутентификацию в IDP - PullRequest
2 голосов
/ 30 апреля 2019

При реализации аутентификации на основе SAML для одного из наших приложений я столкнулся с требованием, в котором нам необходимо восстановить сеанс пользователя после аутентификации с помощью IdP (Identity Provider).Рассмотрим следующий сценарий -

  1. Пользователь пытается открыть страницу 1
  2. , поскольку страница 1 требует аутентификации, мы перенаправляем пользователя на IDP
  3. IDP аутентифицирует и перенаправляет пользователя обратнов SP (поставщик услуг).

К сожалению, после аутентификации пользователь попадает на домашнюю страницу по умолчанию вместо страницы 1. Согласно документации, мы можем использовать relayState для передачи информации из SPв IdP (во время запроса аутентификации) и обратно из IdP в SP.

Похоже, WebSSOProfileOptions позволяет нам указать значение relayState, но в этом случае значение не будет фиксированным или статическим.

Как мы можем передать URL текущей страницысостояние ретрансляции, чтобы после аутентификации мы могли получить то же самое и перенаправить пользователя обратно на ту же страницу?

1 Ответ

0 голосов
/ 13 мая 2019

Разрешение :
Официальная ссылка Класс WebSSOProfileOptions демонстрирует функцию, которая отправляет пользовательское значение в переменную relayState, то есть void setRelayState (String relayState).
Пример кодирования для отправки текущего URL-адреса в качестве состояния ретрансляции при отправке запроса аутентификации в IDP

@Bean
 public SAMLEntryPoint samlEntryPoint() {
     SAMLEntryPoint entryPoint = new SAMLEntryPoint();
     entryPoint.setDefaultProfileOptions(defaultWebSSOProfileOptions());
     return entryPoint;
 }
@Bean
 public WebSSOProfileOptions defaultWebSSOProfileOptions() {
     WebSSOProfileOptions options = new WebSSOProfileOptions();
     options .setBinding("urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST");
     options.setRelayState(current-SP-URL);
     return options;
 }


Примечания :
(1) Цитировать ваше сообщение «Похоже, что WebSSOProfileOptions позволяет нам указать значение relayState, но в этом случае это значение не будет фиксированным или статическим.»

Ответ :
Да.Ответ на вопрос Почему SSO, инициированный SP, имеет RelayState в качестве случайного непрозрачного значения , утверждает, что RelayState в SSO, инициированном SP, обычно не является URL-адресом.Вместо этого это непрозрачная строка, которую IDP возвращает обратно.
Это означает, что " значение не будет фиксированным или статическим ".

(2) Цитируйте свой вопрос "Как мы можем передать URL текущей страницыпередать состояние, чтобы мы могли получить то же самое после аутентификации и перенаправить пользователя обратно на ту же страницу? "

Ответ :
Ответ на Почему SP-Инициированный SSO имеет RelayState в качестве случайного непрозрачного значения утверждает, что на основе приведенного выше описания из спецификации RelayState является просто указателем, который поставщик услуг будет использовать для определения окончательного TARGET (URL).Если провайдер должен отправить URL-адрес в IDP с помощью RelayState, это побеждает модель безопасности.
Это означает, что мы НЕ можем "передать URL-адрес текущей страницы в RelayState" , иначенарушит модель безопасности, установленную SAML.
Вот почему Spring SAML требует, чтобы значение RelayState, генерируемое SSO-инициатором SP *, не было фиксированным или статическим, то есть " после аутентификациипользователь попадает на домашнюю страницу по умолчанию вместо страницы 1.".

(3) Другая информация
(I) Для SSO, инициируемого SP, RelayStateзначение должно быть непрозрачной строкой.
(II) Для SSO, инициируемого IdP, значение relayState может быть , на какой URL SP должен перенаправить .Это де-факто стандарт, используемый для RelayState, о чем свидетельствует ответ на другой вопрос StackOveflow " Что именно является параметром RelayState, используемым в SSO (например, SAML)? ".
(III) You НЕ МОЖЕТ «отправить текущий URL-адрес как состояние ретрансляции при отправке запроса на аутентификацию в IDP» , в противном случае он нарушит модель безопасности, установленную SAML, что продемонстрировано в ответе на Почему SSO, инициированная SP, имеет RelayState какслучайное непрозрачное значение .

...