在SSO(例如SAML)中,RelayState参数的确切用途是什么?

89

我正在尝试理解使用SAML的SSO。我遇到了RelayState参数,并且非常困惑为什么它在SSO中首先发送编码URL?这具体意味着什么?

请阅读来自Google Developer文档的以下内容:

Google生成一个SAML身份验证请求。将SAML请求编码并嵌入到合作伙伴SSO服务的URL中。 RelayState参数包含用户正在尝试访问的Google应用程序的编码URL,也嵌入在SSO URL中。这个RelayState参数是一个不透明标识符,应该没有任何修改或检查地返回。

4个回答

150
RelayState 的原始含义是,SP 可以在 AuthnRequest 中发送某些值到 IDP,并随后将其获取回来。SP 可以在 RelayState 中放置任何想要的值,而 IDP 应该只是在响应中回显它。

RelayState 参数旨在作为不透明标识符传递,不进行任何修改或检查。

使用 Idp-initiated 登录时,还有另一种事实上的标准用法 RelayState。在这种情况下,没有来自 SP 的请求,因此无法中继任何状态。相反,IDP 使用 RelayState 向 SP 发送信号,指示成功登录后 SP 应重定向到的 URL 。 标准(Bindings 4.1.5)中指出,RelayState "可以是服务提供者上资源的URL"。

看起来 Google 即使在 SP-initiated 登录时也在使用 RelayState 作为目标 URL,这是完全可以的。但是,正如文档所说,IDP 应该简单地将其中继回来。


8
很高兴在这里指出了“事实上的标准用法”。我一直在努力理解为什么重定向URL会被发送到“RelayState”下面。 - dey.shin
因此,一些IdP(例如Google)将“RelayState”用于非标准目的,这可能会导致SP的消费端点验证失败?这很重要,因为一个人可能希望实现SP以拒绝具有无效“RelayState”的SAML响应,因为它可能被恶意使用(类似于OAuth中的开放式重定向问题)。为了支持像Google这样的IdP,SP必须忽略无效的“RelayState”,但不会完全拒绝响应。 - Florian Winter
5
仅供参考,SP(服务提供商)通常是用户正在进行身份验证的Web应用程序/服务,IDP / IdP(身份提供商)是用户拥有现有身份或账户的服务。 - Mark
2
使用RelayState向SP发送IdP信令是SAML 2标准中的一个有效用例。5.1.1介绍 有时,绑定特定字段称为RelayState,用于协调IdP和SP的消息和操作,例如,在与SP通信时允许发起SSO的IdP指示所需资源的URL。 - Risto
1
@Risto 感谢您的评论。自从我写下那个答案以来,我已经学到了它确实在标准中提到了,我更新了我的答案。 - Anders Abel

10

RelayState是指在成功登录后,IDP将重定向用户到SP上的资源的标识符。它是一种使SSO过程对用户更加短暂的方式,因为他们会再次重定向到最初在SP上请求的同一页面。


2
不对,你描述的是断言消费者服务URL。 - Christian Davén
RelayState是SAML协议的一个参数,用于标识用户在登录并被重定向到依赖方联合服务器后将访问的特定资源。https://blogs.technet.microsoft.com/askds/2012/09/27/ad-fs-2-0-relaystate/ - Yasser Afifi
在“Idp-initiated”身份验证中,RelayState可以几乎像你说的那样使用。请参见Anders Abel上面的答案,他是正确的。 - Christian Davén

7
根据官方SAML文档,某些绑定定义了“RelayState”机制以保留和传递状态信息。当这样的机制用于作为SAML协议的初始步骤来传递请求消息时,它会对随后用于传递响应的绑定的选择和使用产生要求。换句话说,如果SAML请求消息附带有RelayState数据,则SAML响应者必须使用同样支持RelayState机制的绑定返回其SAML协议响应,并且它必须将其收到的与请求相对应的RelayState数据精确地放置在响应中的相应RelayState参数中。

2
以下流程图可以逐步帮助您。ACS URL和relayState都是不同的。relayState提供了一个额外的信息/ URL,以处理用户要去哪里的位置。更多细节 saml-sso-idp-initialted-flow-relay-state

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接