【问题标题】:SimpleSamlPhp IDP calling another IDP (IDP Proxy)SimpleSamlPhp IDP 调用另一个 IDP(IDP 代理)
【发布时间】:2016-06-23 20:21:06
【问题描述】:

我有一种情况,我将 simpleSamlPhp 作为 IDP,在某些情况下,我想自己处理身份验证请求。在其他情况下,我想将请求发送给另一个 IDP(取决于 cookie 的状态)。如果需要,此 IDP 可以直接与 SP 对话。

我可以编写自定义身份验证模块。在我不想自己处理的情况下,我不确定将 saml 请求推送给第三方的最佳方式。

我看过一些关于 IDP 代理的帖子,这是我想要做的吗?

在最坏的情况下,我可以手动创建身份验证请求并将其发送给其他 IDP,但感觉应该有更好的方法。

有没有比手动创建身份验证请求更好的方法?

【问题讨论】:

    标签: saml-2.0 simplesamlphp


    【解决方案1】:

    有几个选项,这实际上取决于您登录的 SP 的功能。如果它支持多个 IdP,则使用发现,否则使用代理。

    发现

    如果服务提供商支持多个 IDP 或发现(这是用户选择正确 IdP 的地方),那么您可以通过这种方式配置 SP。这是身份联合中的常见设置。

    发现页面可以存在于 SP 的外部(这是 simplesamlphpshibboleth 的一个功能,可能还有其他功能)。如果 cookie 存在,您可以自定义发现以自动选择正确的 idp。发现协议允许您告诉 SP 使用哪个 IdP 启动登录。

    代理

    在代理您的 IdP (IdP-A) 时,是另一个 IdP (IdP-B) 的 SP。在这种情况下,您在 authsources 文件中创建一个 SP 并让您的 Idp 使用它。在这种情况下,IdP-A 生成它自己的 SAML 断言,并且原始 SP 只知道 IdP-A。这是一种常见设置,其中 SP 只能了解单个 IdP,并且在中心和辐射身份联合中。

    【讨论】:

      【解决方案2】:

      Patrick 建议的代理是我想要的。它被称为“IdP 代理”。

      我对如何使用 simplesamlphp 实现这一点有点困惑,所以我将我的解决方案发布给后代。

      您需要像在 Simple saml 配置中通常那样定义第二个 IdP。

      您还需要像往常一样定义主机 IdP,并按照here 的描述创建自定义身份验证源。但是,您不需要实现 SimpleSAML_Auth_Source 的扩展而不是 sspmod_core_Auth_UserPassBase

      那么你应该把下面的代码放在你的类中

       public function authenticate(&$state) {
          // Custom logic here to choose IDP
          $authId = 'proxy_test_idp'; // or whatever the id of IDP you need to proxy to is.
          $as = SimpleSAML_Auth_Source::getById($authId);
          $as->authenticate($state);
        }
      

      simplesamlphp 中包含的multi auth module 中的代码更详细地说明了这一点。根据您的需要,您可能需要做更多工作,但这本质上是 simplesamlphp 中 IDP 代理的 MVP。

      【讨论】:

        猜你喜欢
        • 2015-06-12
        • 2016-09-29
        • 2013-03-27
        • 2017-10-21
        • 2017-06-25
        • 2013-05-11
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        相关资源
        最近更新 更多