Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Single sign on SSO(例如SAML)中使用的RelayState参数到底是什么?_Single Sign On_Saml_Saml 2.0 - Fatal编程技术网

Single sign on SSO(例如SAML)中使用的RelayState参数到底是什么?

Single sign on SSO(例如SAML)中使用的RelayState参数到底是什么?,single-sign-on,saml,saml-2.0,Single Sign On,Saml,Saml 2.0,我正在尝试使用SAML来理解SSO。我遇到了RelayState参数,并且非常困惑为什么它在SSO中首先发送编码的URL?这到底是什么意思 请阅读以下内容: Google生成一个SAML身份验证请求。SAML请求被编码并嵌入到合作伙伴SSO服务的URL中。包含用户试图访问的Google应用程序的编码URL的RelayState参数也嵌入到SSO URL中。此RelayState参数是一个不透明的标识符,在不进行任何修改或检查的情况下传回 RelayState的原始含义是SP可以将一些值与Auth

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

请阅读以下内容:

Google生成一个SAML身份验证请求。SAML请求被编码并嵌入到合作伙伴SSO服务的URL中。包含用户试图访问的Google应用程序的编码URL的RelayState参数也嵌入到SSO URL中。此RelayState参数是一个不透明的标识符,在不进行任何修改或检查的情况下传回


RelayState
的原始含义是SP可以将一些值与
AuthnRequest
一起发送到IDP,然后将其取回。SP可以在
RelayState
中输入它想要的任何值,IDP应该在响应中回显它

RelayState
参数是一个不透明的标识符,可以在不进行任何修改或检查的情况下传回

当使用Idp启动的登录时,
RelayState
还有另一个事实上的标准用法。在这种情况下,没有来自SP的传入请求,因此没有要中继回的状态。相反,IDP使用
RelayState
向SP发出信号,说明成功登录后SP应重定向到的URL。在标准(Bindings 4.1.5)中指出,RelayState“可能是服务提供商处资源的URL。”


谷歌似乎正在对目标URL使用
RelayState
,即使是在SP发起的登录上,这也很好。但是,正如文档所述,IDP应该将其中继回去。

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

根据正式SAML文档

一些绑定定义了一种“RelayState”机制来保存和传递状态信息。什么时候 这种机制用于传输请求消息,作为SAML协议的初始步骤 对随后用于传达响应的绑定的选择和使用提出要求。 也就是说,如果SAML请求消息伴随着RelayState数据,则SAML响应器 必须使用也支持RelayState机制的绑定返回其SAML协议响应,并且 它必须将与请求一起接收的确切RelayState数据放入相应的RelayState中 响应中的参数


我很高兴这里指出了“事实上的标准用法”。我一直在努力理解为什么重定向URL是在
RelayState
下发送的。所以一些IDP(如Google)将
RelayState
用于非标准目的,这可能导致SP的消费者端点验证失败?这一点很重要,因为可能需要实现SP来拒绝具有无效的
RelayState
的SAML响应,因为它可能被恶意使用(类似于OAuth中的开放重定向器问题)。为了支持像Google这样的IDP,SP必须忽略无效的
RelayState
,但不能完全拒绝响应。仅供参考,SP=服务提供商(通常是用户正在验证的web应用/服务)和IDP/IDP=身份提供方(用户拥有现有身份或帐户的服务).IdP通过RelayState向SP发送信号在中是一个有效的用例。5.1.1.简介|概述5.1.1简介有时,一个名为RelayState的绑定特定字段用于协调IdP和SP的消息和操作,例如,允许IdP(启动SSO的IdP)在与SP通信时指示所需资源的URL。@Risto感谢评论。自从我写了那个答案,我知道标准中确实提到了它,我更新了我的答案。不,这是不正确的。您正在描述断言使用者服务URL。RelayState是SAML协议的一个参数,用于标识用户在登录并定向到依赖方的联合服务器后将访问的特定资源。在“Idp发起的”身份验证中,几乎可以按照您所说的那样使用RelayState。看上面安德斯·亚伯的回答,他是正确的。