我知道很多服务提供商使用relay state来跟踪在SP启动SSO时访问的资源,以便SP可以在SAML断言消耗后重定向到它。
然而,我正在查看SAML响应的目标属性,看起来它是专门为此情况设计的。
我错过了什么吗?为什么服务提供商要以这种方式使用relay state(而不是使用目标)?
如您所说,RelayState
是在成功的 SAML 认证过程完成后,SP 重定向用户到的位置。
但是,在消息签名时需要 Destination
属性(与 SAML 的 Binding/Transport 相关)。
来自SAML 绑定规范文档第3.4.5.2 安全考虑节:
如果消息已签名,则协议消息根 SAML 元素中的 Destination XML 属性必须包含发件人指示用户代理程序传递消息的 URL。 然后,接收方必须验证该值是否与接收到消息的位置相匹配。
这主要是为了避免某人在中间检索 IdP 发送的 SAMLResponse 并将该消息发送给其他未创建和发送 SAMLResponse 的 SP 方。
如果 SAMLResponse 中包含了 Destination(它也被签名了),则预期的 SP(接收者)可以验证 Destination 属性值是否与接收到 SAMLResponse 的目标/位置匹配。 可能预期的 SP 知道目标/位置 URL,并且他们可以验证这两个值是否相等。 如果它们相等,则 IdP 将 SAMLResponse 发送给预期的 SP,并且 SP 接受它,否则 SP 必须拒绝该 SAMLResponse。