Что такое параметр RelayState, используемый в SSO (например, SAML)?

Я пытаюсь понять систему единого входа с использованием SAML. Я наткнулся на параметр RelayState и меня очень смущает, почему он первым в SSO отправляет закодированные URL-адреса? Что именно это означает?

Прочтите следующее в документации для разработчиков Google:

Google генерирует запрос аутентификации SAML. Запрос SAML кодируется и встраивается в URL-адрес партнерской службы единого входа. Параметр RelayState, содержащий закодированный URL-адрес приложения Google, к которому пытается подключиться пользователь, также встроен в URL-адрес системы единого входа. Этот параметр RelayState должен быть непрозрачным идентификатором, который передается обратно без каких-либо изменений или проверок.


person Oomph Fortuity    schedule 18.12.2015    source источник


Ответы (4)


Первоначальное значение RelayState состоит в том, что SP может отправить некоторое значение IDP вместе с AuthnRequest, а затем получить его обратно. SP может поместить любое значение в RelayState, и IDP должен просто повторить его в ответе.

Этот параметр RelayState предназначен для непрозрачного идентификатора, который передается обратно без каких-либо изменений или проверок.

Существует также другое, де-факто стандартное использование RelayState при использовании входа в систему, инициированного Idp. В этом случае нет входящего запроса от SP, поэтому не может быть никакого состояния, которое нужно ретранслировать обратно. Вместо этого RelayState используется IDP, чтобы сообщить SP, на какой URL-адрес SP должен перенаправить после успешного входа в систему. В стандарте (привязки 4.1.5) указано, что RelayState МОЖЕТ быть URL-адресом ресурса у поставщика услуг.

Похоже, Google использует RelayState для целевого URL даже при входе в систему, инициированном SP, и это нормально. Но IDP должен, как сказано в документации, просто передать его обратно.

person Anders Abel    schedule 18.12.2015
comment
Я рад, что здесь было указано на «стандартное использование де-факто». Я изо всех сил пытался понять, почему URL-адрес перенаправления был отправлен под RelayState. - person dey.shin; 18.01.2018
comment
Итак, некоторые IdP (например, Google) используют RelayState для нестандартных целей, что может привести к сбою проверки на конечной точке SP? Это важно, так как можно реализовать SP для отклонения ответов SAML с недопустимым RelayState, поскольку он может использоваться злонамеренно (аналогично проблеме открытого перенаправителя в OAuth). Для поддержки таких IdP, как Google, SP должен игнорировать недопустимый RelayState, но не отклонять ответ вообще. - person Florian Winter; 12.07.2018
comment
Для справки: SP = Service Provider (обычно веб-приложение / служба, в которой пользователь проходит аутентификацию) и IDP / IdP = Identity Provider (служба, в которой у пользователя есть действующая личность или учетная запись). - person Mark; 06.02.2019
comment
Передача сигналов IdP на SP с помощью RelayState является допустимым вариантом использования в стандарт SAML 2. 5.1.1. Введение | схема 5.1.1 Введение Иногда специфичное для привязки поле, называемое RelayState, используется для координации сообщений и действий IdP и SP, например, чтобы позволить IdP (с которым был инициирован SSO) указывать URL-адрес желаемый ресурс при общении с SP. - person Risto; 09.09.2020
comment
@Risto Спасибо за комментарий. Поскольку я написал этот ответ, я узнал, что он действительно упоминается в стандарте, и обновил свой ответ. - person Anders Abel; 15.09.2020

RelayState - это идентификатор ресурса в SP, на который IDP перенаправит пользователя (после успешного входа в систему). Это способ сделать процесс SSO более временным для пользователя, потому что он снова перенаправляется на ту же страницу, которую они первоначально запросили на SP.

person Yasser Afifi    schedule 18.12.2015
comment
Нет, это неверно. Вы описываете URL-адрес службы потребителей утверждений. - person Christian Davén; 22.08.2019
comment
RelayState - это параметр протокола SAML, который используется для идентификации конкретного ресурса, к которому пользователь будет обращаться после входа в систему, и направлен на сервер федерации проверяющей стороны. blogs.technet.microsoft.com / askds / 2012/09/27 / - person Yasser Afifi; 22.08.2019
comment
При аутентификации, инициированной Idp, RelayState можно использовать почти, как вы говорите. См. Ответ Андерса Абеля выше, он прав. - person Christian Davén; 23.08.2019

Согласно официальному документу SAML,

Некоторые привязки определяют механизм «RelayState» для сохранения и передачи информации о состоянии. Когда такой механизм используется для передачи сообщения запроса в качестве начального шага протокола SAML, он предъявляет требования к выбору и использованию привязки, которая впоследствии используется для передачи ответа. А именно, если сообщение запроса SAML сопровождается данными RelayState, то ответчик SAML ДОЛЖЕН вернуть свой ответ протокола SAML, используя привязку, которая также поддерживает механизм RelayState, и он ДОЛЖЕН поместить точные данные RelayState, полученные с запросом, в соответствующий RelayState. параметр в ответе.

person Aravin    schedule 20.09.2017

Приведенная ниже блок-схема может помочь вам шаг за шагом. URL ACS и relayState разные. relayState дает вам еще одну информацию / URL-адрес для обработки того, куда именно пользователь хочет перейти. подробнее

saml-sso-idp-initialted-flow-relay-state

person Kiran Mali    schedule 16.07.2021