Spring SAML:如何将请求的 URL 作为 RELAY_STATE 推送到 SAML?

Posted

技术标签:

【中文标题】Spring SAML:如何将请求的 URL 作为 RELAY_STATE 推送到 SAML?【英文标题】:Spring SAML: how to push the requested URL to SAML as RELAY_STATE? 【发布时间】:2017-02-11 23:31:19 【问题描述】:

例如,您的网站上有两个不同的文件夹,/folderA 和 /folderB

您可以在 Spring Security 中为这两个页面设置通用的 loginURL。

我使用 Spring SAML。真棒

    Spring Security:一旦用户尝试获取/folderA/folderB,他们将首先被重定向到“本地”登录URL(domain.com/auth)。 Spring SAML:LoginURL 页面 (domain.com/auth) 会将用户重定向到远程 SAML SSO 提供程序(例如,myapp.okta.com)。端点在 metadata.xml 中指定。 SAML SSO 提供程序将用户重定向到 SSO url(在 OKTA 中配置,假设为 sso.domain.com/auth/sso)。 我想在 SSO 控制器 (sso.domain.com/auth/sso) 中使用原始请求的 URL(在本例中为 /folderA 或 /folder)。我想让逻辑依赖于请求的 URL。

所以我的问题是

如何使用 Spring SAML 将这些文件夹 URL 注入到 SAML SSO Provider 的请求中? 我知道如何在没有 Spring SAML 的情况下实现它。所以我正在寻找如何为其配置 Spring SAML。

我认为RELAY_STATE 用于它。但我不明白如何在步骤 (1) 和/或 (2) 中检索它

【问题讨论】:

【参考方案1】:

中继状态作为查询参数与 SAMLRequest 一起传递。传递中继状态取决于您使用的工具包,因此您需要查看他们的文档以了解如何完成。我在网上找到了这个有用的线程http://forum.spring.io/forum/spring-projects/security/saml/125415-spring-saml-integration-authentication-extended-info-relaystate

此外,一旦通过 SAML 建立会话,您就可以点击此链接(在这种情况下,您可以跳过传递会话令牌)http://developer.okta.com/use_cases/authentication/session_cookie#initiate-a-saml-sso-with-the-session-token。您可以使用 Sign on Tab -> View Setup instructions 中的单点登录 url,并对传入 RelayState 的请求发出 GET 请求。这将启动带您进入中继状态。

【讨论】:

以上是关于Spring SAML:如何将请求的 URL 作为 RELAY_STATE 推送到 SAML?的主要内容,如果未能解决你的问题,请参考以下文章

无法更改 Spring 安全 SAML SSO 中的默认“回复 URL”(断言消费者服务位置)

Spring SAML - 如何在 SP HTTP 请求上添加自定义字段?

Spring SAML Okta - 如何在 IDP 启动的流程中重定向到自定义 URL

Spring saml 将请求重定向到 http

即使在 IDP 使用 SAML 成功登录后,获取身份验证对象仍为空

Tomcat 上的 Spring Security SAML 元数据 URL