单点登录如何使用 IdP 作为代理?

问题描述

实施SSO 流程以进行身份​​验证。我是这里的新手,无法到达某些地方。我试图实现服务提供者发起的流程。它看起来像这样:

  1. 用户点击我的前端应用上的按钮以通过一个 federation 进行身份验证。
  2. 用户重定向到联合表单并选择所需的 IdP 进行身份验证。
  3. 点击 IdP 按钮后,用户重定向到某些 IdP 上的特殊身份验证表单并输入他们的凭据。
  4. 用户点击 Log in 并使用 SAMLResponse 重定向到我们的服务器。

所以,它看起来不错,但我有一个必需的身份验证参数,这对我的系统是必需的,但对 IdP 不是必需的。这意味着我需要以某种方式将此参数发送给 IdP,而 IdP 应将其返回而不做任何更改。我试图阅读很多信息如何去做,但什么也找不到。我看到名为 RelayState 的参数可以设置为前端应用的 URL,在 IdP 上进行身份验证后,它将返回到我的服务器而无需更改。

基本上我的问题是如何使用 IdP 作为代理?

解决方法

您正在做的是SP Initiated,这里有一个很好的writeup

" RelayState 的本意是 SP 可以将一些值与 AuthnRequest 一起发送给 IDP,然后将其取回。SP 可以将它想要的任何值放入 RelayState 中,IDP 只需将其回显回应。”

Example 如何使用它。

问题在于并非所有 IDP 都实现了它,如果您从您的 IDP 重定向到另一个 IDP,它可能无法通过。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...