【问题标题】:IDP and SP authentication flow without redirecting to the IDP无需重定向到 IDP 的 IDP 和 SP 身份验证流程
【发布时间】:2015-02-11 20:51:13
【问题描述】:

标准 SSO 例程涉及主动将用户从 SP 重定向到 IDP 并返回。虽然这种机制有几个很大的优点,但缺点是重定向可能会使用户感到困惑。 (“嘿,我刚刚在 azure.com,现在我是 live.com 吧?”)。

我想支持在 SP 的网站中包含用户名/密码登录表单的场景。在这个特定场景中,我既是 SP 又是 IDP 的所有者,并且可以完全控制其实施。怎么会达到这样的境地?我可以想象以下方法:

<form action="https://idp.contoso.com/login" method="post">
  <input type="hidden" name="issuer" value="sp.contoso.com">
  Username: <input type="text" name="username"><br>
  Password: <input type="text" name="password"><br>
  <input type="submit" value="Submit">
</form>
  1. 在 SP 的网站中包含上述表格。
  2. IDP 接受 POST、验证凭据并创建 SAML 响应
  3. IDP 返回带有自动提交表单的网站,该表单 POST 是对颁发者的 SAML2 端点 url 的 SAML 响应(例如 https://sp.contoso.com/saml
  4. SP 接受 POST,验证 SAML 响应并根据 SP 特定标准构建用户会话

这是一个可行的解决方案吗?如果是这样,是否以符合标准的产品(如 WSO2 身份服务器)支持的任何方式支持它?如果不是,那么在使用来自 SP 的登录表单时,针对 IDP 对用户进行身份验证的正确方法是什么?

【问题讨论】:

  • 听起来你想要的东西更像是 STS 而不是 SAML...我建议研究类似 WS-Trust 的东西。

标签: security oauth identity saml wso2is


【解决方案1】:

将登录推迟到外部权限的整个想法是不必处理登录界面。在许多情况下,Idp 使用智能卡、一次性 SMS 代码或类似的,因此它不仅仅是一个简单的用户名/密码组合来登录。

如果您同时控制 SP 和 Idp,并且希望避免重定向到 Idp,我认为最好在 Idp 端创建一个 API,让 SP 提供用户名/密码并返回身份验证结果直接地。该结果可以是 SAML 断言的形式,也可以是自定义的。

【讨论】:

    【解决方案2】:

    我刚刚使用 WSO2IS 尝试了相同类型的场景,它包含一些称为请求路径验证器的东西,它验证登录请求中的用户凭据。是的。例如,如果您采用 SAML2 SSO 场景,SP 可以使用 POST 绑定向 IDP 发送 SAML2 Auth 请求。在同一个请求中,SP 可以发送从 SP 应用程序的登录页面检索到的最终用户凭据。然后您将不会在 IDP 中看到登录页面,并且从身份验证请求中检索凭据并使用 IDP 的用户存储进行验证。如果成功生成 SAML2 响应。我已经用示例服务提供程序应用程序和 WSO2IS 写了一些关于它的博客,希望对您有所帮助。请看here

    【讨论】:

      猜你喜欢
      • 2015-02-16
      • 1970-01-01
      • 2020-01-31
      • 2018-06-03
      • 2012-12-12
      • 2022-07-07
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多