【问题标题】:include assertion consumer service URL in simplesamlphp request for sp-initated SSO在 sp-initated SSO 的 simplesamlphp 请求中包含断言使用者服务 URL
【发布时间】:2014-07-03 22:35:30
【问题描述】:

请耐心等待,这是我的第一个联合身份设置。我正在使用 SimpleSAMLphp 进行连接。

我正在尝试为使用 PingFederate 的客户设置一个新应用程序。我们没有在我们这边存储任何凭据,因此我相信这会使其成为使用远程 IdP(来自客户端)的 SP 发起的 SSO 请求。我已经设置了config/authsources.php 文件:

'client-sp' => array(
    'saml:SP',
    'privatekey' => 'saml.pem',
    'certificate' => 'saml.crt',
    'entityID' => NULL,
    'idp' => 'https://client.idp.url',
    'discoURL' => NULL,
    'signature.algorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
),

我得到了他们的元数据文件并设置了metadata/saml20-idp-remote.php 文件:

$metadata['https://client.idp.url'] = array(
    'metadata-set' => 'saml20-idp-remote',
    'entityid' => 'https://client.idp.url',
    'SingleSignOnService' => array(
        0 => array(
            'Binding' => "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", 
            'Location' => "https://client.idp.url/idp/startSSO.ping?PartnerSpId=http://my.app.url",
        ),
        1 => array(
            'Binding' => "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect",
            'Location' => "https://client.idp.url/idp/startSSO.ping?PartnerSpId=http://my.app.url",
        ),
    ),
    'certData' => 'etc'
    'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',
);

我们终于做到了,从 SimpleSAMLphp 控制面板中,我们可以测试身份验证源,它正确地重定向到他们的公司登录页面,接受用户名和密码,然后重定向回来......但是它重定向回的 URL 是主应用程序 URL,而不是 SimpleSAMLphp 的管理面板,它列出了 SAML 响应中返回的所有属性。回顾我们第一次建立联盟时的笔记,他们需要我们在 SP 发起的 SSO 的请求中提供断言消费者服务 URL ...我认为这是唯一缺少的部分,但我不确定如何配置 SimpleSAMLphp 来做到这一点。预期的行为是,对于任何需要 SSO 的 URL,应用程序将检查系统中是否存在 SAML 令牌,如果没有,则将用户重定向到客户端的登录页面,然后返回到用户尝试访问的任何位置在他们被拦截之前。我查看了 SimpleSAMLphp 的文档,但它们似乎……不完整;例如,他们似乎对 ACS URL 唯一提及的是 IdP 发起的请求。但它们也是 PHP SSO 世界中唯一的名称,所以我有点坚持使用它们,无论好坏。

所以我的问题是:无论是通过 ACS URL 还是其他方式,我如何控制用户通过客户端的 SSO 页面登录后被重定向到哪个 URL?

【问题讨论】:

    标签: php single-sign-on simplesamlphp pingfederate


    【解决方案1】:

    绑定的 URL 错误:由于您的客户端使用 PingFederate,因此 URL 应该是:

    'Location' => "https://client.idp.url/idp/SSO.saml2",
    

    对于 POST 和 Redirect 绑定。您应该根据从客户端获得的元数据仔细检查:如果该元数据是由 PingFederate 自动生成的(应该如此),它不会包含指向“内部”idp/startSSO.ping 端点的链接,而是指向公共 SAML 2.0 端点的链接/idp/SSO.saml2.

    【讨论】:

    • 我将其标记为答案,因为从概念上讲您是正确的,但实际过程要简单得多。事实上,SsimpleSAMLphp 确实有一个元数据导入工具,尽管它有点隐蔽。当我通过导入工具运行他们的元数据时,它吐出的结果有点不同,服务奇迹般地开始工作了。当您使用正确的工具完成工作时会发生惊人的事情。
    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多