Как правильно передать RelayState URL-адресам ACS Okta?

Как правильно передать RelayState URL-адресам ACS на стороне Okta, чтобы он попал в IdP в том виде, в котором он был введен?

Предоставляемые Okta URL-адреса ACS для поставщиков удостоверений не обрабатывают RelayState, инициированное SP, как я ожидал.

Я помещаю ?RelayState=hello в URL-адрес ACS, и IdP получает SAMLRequest с RelayState равным %3FRelayState%3Dhello, который декодируется в ?RelayState=hello.

Если я поставлю вместо этого ?RelayState=, то RelayState с SAMLRequest будет пустым, как я и ожидал.

Я прикрепил файл NetworkData.xml, полученный из Internet Explorer. В строке 447, столбце 53, вы можете увидеть, что RelayState, закодированный Okta, будет отправлен по почте на https://fs.research.verafin.local/adfs/ls включает в себя ?RelayState.

Служба SSO IdP AD FS по адресу https://fs.research.verafin.local/adfs/ls декодирует и перекодирует RelayState, сохраняя неверное значение, которое ему было присвоено, и помещает его в форму для POSTED на https://verafin.oktapreview.com:443/sso/saml2/0oaa25fc86YRTkyb60h7 (URL-адрес Okta ACS).

Затем он перенаправляется на https://verafin.oktapreview.com/?RelayState=hello&fromLogin=true < / а> HTTP / 1.1

Это ошибка в реализации СКУД Okta?

Как мне получить URL-адреса ACS Okta для приема RelayState в запросах GET (SSO, инициированный SP с RelayState)?

Действия по воспроизведению

  1. Скопируйте URL-адрес ACS от поставщика удостоверений в Okta
  2. Вставьте его в браузер с ?RelayState=hello после него
  3. Посетите полученный URL

Как правильно передать RelayState URL-адресам ACS на стороне Okta, чтобы он попал в IdP в том виде, в котором он был введен?


person Alain O'Dea    schedule 25.04.2017    source источник


Ответы (2)


Принятый ответ больше не актуален, Okta не рекомендует использовать fromURI сейчас и рекомендует использовать SAML DeepLinks, как определено здесь

Перенаправление с использованием глубоких ссылок SAML

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

SP ACS URL
For example: https://{myOktaDomain}.com/sso/saml2/:idpId
The app to which the user is automatically redirected after successfully authenticating with the IdP
For example: /app/:app-location/:appId/sso/saml
Optionally, if the app is an outbound SAML app, you can specify the relayState passed to it.
For example: ?RelayState=:anyUrlEncodedValue

Глубинная ссылка для трех вышеупомянутых частей: https://{myOktaDomain}.com/sso/saml2/:idpId/app/:app-location/:appId/sso/saml?RelayState=:anyUrlEncodedValue

person Chris Whittick    schedule 30.10.2020
comment
Это огромное улучшение. Спасибо за то, что поделился этим. - person Alain O'Dea; 30.10.2020

Вы можете использовать fromURI в качестве параметра запроса с небольшими изменениями.

Пример с минимальными зависимостями - петля внутри Okta Org.

Допустим, вы хотите перейти в интерфейс администратора организации. Это в:

/home/admin-entry

Закодированный URL-адрес (что вам нужно для RelayState), то есть:

%2Fhome%2Fadmin-entry

В этом можно убедиться, просмотрев URL-адрес ссылки администратора на странице /app/UserHome.

Вы создаете поставщика удостоверений с именем loopback в Okta. В моем примере URL ACS:

https://dev-971545.oktapreview.com/auth/saml20/loopback

Вы создаете приложение, связанное с этим поставщиком удостоверений, которое называется loopback. У него есть URL-адрес для единого входа (отображается после нажатия кнопки "Просмотр инструкций по настройке" на вкладке "Вход"):

https://dev-971545.oktapreview.com/app/independentconsultantdev927755_loopback_1/exkadbfail8okn4W80h7/sso/saml

Есть два уровня RelayState:

  1. Приложение, к которому Okta направит вас: в данном случае приложение loopback
  2. Путь в этом приложении

Передать RelayState в URL-адрес системы единого входа в приложении очень просто:

https://dev-971545.oktapreview.com/app/independentconsultantdev927755_loopback_1/exkadbfail8okn4W80h7/sso/saml?RelayState=%2Fhome%2Fadmin-entry

Следуя этому URL-адресу, я попадаю в панель администратора.

Входящего SAML пока нет. Все это в Okta. Добавим уровень SAML.

Путь к этому URL-адресу SSO приложения без ведущей косой черты (обходной путь для fromURI):

app/independentconsultantdev927755_loopback_1/exkadbfail8okn4W80h7/sso/saml?RelayState=%2Fhome%2Fadmin-entry

Мы кодируем URL-адрес, чтобы подготовить его к значению параметра запроса:

app%2Findependentconsultantdev927755_loopback_1%2Fexkadbfail8okn4W80h7%2Fsso%2Fsaml%3FRelayState%3D%252Fhome%252Fadmin-entry

Затем вы отбрасываете это безумие в ACS поставщика удостоверений с обратной связью в качестве параметра запроса fromURI:

https://dev-971545.oktapreview.com/auth/saml20/loopback?fromURI=app%2Findependentconsultantdev927755_loopback_1%2Fexkadbfail8okn4W80h7%2Fsso%2Fsaml%3FRelayState%3D%252Fhome%252Fadmin-entry

Вы можете убедить себя, что это сработало, или вы можете открыть вкладку «Сеть» в инструментах разработчика своего браузера и отследить обмен данными. ACS отбрасывает RelayState перед косой чертой (поэтому нам пришлось удалить его), затем перенаправляется на IdP (приложение обратной связи), а затем возвращается обратно в ACS (с сохранением RelayState). Вход завершается, и Okta перенаправляется на URL-адрес системы единого входа приложения с обратной связью с RelayState в параметре запроса. Okta обрабатывает это и перенаправляет на себя, а затем перенаправляет на встроенный RelayState, который переводит вас на панель администратора.

Это рабочий пример Deep Linking из потока, инициированного SP из Okta, с Okta в качестве посредника SAML к другому приложению.

person Alain O'Dea    schedule 09.06.2017