1

请耐心等待,这是我的第一个联合身份设置。我正在使用 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 令牌,如果没有,则将用户重定向到客户端' s 登录页面,然后返回到用户在被拦截之前尝试访问的任何位置。我查看了 SimpleSAMLphp 的文档,但它们似乎……不完整;例如,他们似乎对 ACS URL 唯一提及的是 IdP 发起的请求。但它们也是 PHP SSO 世界中唯一的名称,所以我有点坚持使用它们,无论好坏。

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

4

1 回答 1

0

绑定的 URL 是错误的:因为您的客户端使用 PingFederate,所以 URL 应该是:

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

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

于 2015-02-24T16:52:53.573 回答