SSO - SAML, перенаправить пользователя на указанную целевую страницу после успешного входа в систему

Я внедряю систему единого входа, где я являюсь поставщиком удостоверений, прямо сейчас я могу успешно войти в систему поставщика услуг. Но это приводит меня на домашнюю страницу. Я хочу указать URL целевой страницы при отправке ответа. Искали довольно много, но ничего убедительного не нашли. Не совсем знаю, какой элемент ответа SAML содержит URL целевой страницы или находится в той форме, которую я должен указать. Использование библиотек java и opensaml для генерации ответа.


person user3391212    schedule 23.01.2015    source источник
comment
как вы это сделали, я застрял на задаче, в которой вы преуспели, как вы создали saml   -  person Fahad Abdullah    schedule 08.12.2015


Ответы (1)


Хотя этого нет в спецификациях SAML, стандартом де-факто является использование для этого элемента RelayState. Он добавляется в качестве параметра в ответ в дополнение к параметру SAMLResponse и значению landing URL. Пример HTML-страницы из http://en.wikipedia.org/wiki/SAML_2.0 для IDP, использующего привязку POST для ответа:

<form method="post" action="https://sp.example.com/SAML2/SSO/POST" ...>
    <input type="hidden" name="SAMLResponse" value="<response>" />
    <input type="hidden" name="RelayState" value="<url>" />
    ...
    <input type="submit" value="Submit" />
</form>

Изменить:
Для ясности, объявление параметра RelayState является частью спецификаций и включено, чтобы разрешить передачу произвольного состояния между SP и IDP. Использование его для передачи URL-адреса, определяющего целевую страницу, не определено в спецификации, но фактически является стандартным использованием. Любое использование RelayState в IDP-init-SSO будет зависеть от парного соглашения между IDP и SP, и это просто соглашение, которое имеет смысл, полезно и поэтому широко применяется.

person Hans Z.    schedule 23.01.2015
comment
Это безопасно, если я передам незашифрованный URL. Конец SP дает мне не найдено, думаю, они не декодируют его на своем конце. Но работает без кодирования. - person user3391212; 23.01.2015
comment
Извините, я хотел сказать на проводе, что он закодирован в URL-адресе при передаче в HTTP POST; дословно поместив его в HTML-форму, браузер закодирует его. Итак, в примере, который я дал, вы поместите фактическое значение в <url>. Отредактирую текст. - person Hans Z.; 23.01.2015
comment
Не для придирки, но RelayState абсолютно находится в спецификации привязок для SAML 2.0 (т. е. он сильнее, чем стандарт де-факто). Все привязки HTTP POST, HTTP Redirect и HTTP Artifact включают правила для RelayState, хотя ни один из них не требует его использования. . - person Scott Heaberlin; 24.01.2015
comment
Имя RelayState стандартизировано, а его значение - нет. - person Hans Z.; 25.01.2015
comment
обновил ответ информацией о последнем комментарии - person Hans Z.; 25.01.2015