2

第一次尝试将 SAML 实现为 SP。我们决定尝试将 SimpleSAMLphp 与我们定制的 MVC 框架一起使用,因为我们认为它可以节省我们的时间。

我遇到的问题是我最终陷入无限循环或属性为空。

我已经配置了我的元数据并从 SimpleSAMLphp 中的身份验证接口对其进行了测试。idP 有一个与我们开始的位置不同的回发 URL 集,因此:

  • 用户点击 domain.com/sso 我们创建新的实例SimpleSAML_Auth_Simple('our-configured-sp')
  • 称呼$as->requireAuth()
  • 客户端被重定向到 idP
  • idP 将用户重定向回 domain.com/sso/saml

如果我们这样做,我们必须使用相同的代码($as = new SimpleSAML_Auth_Simple('our-configured-sp')例如)创建一个新实例,并且当我们这样做时$as->getAttributes()它是一个空数组。我们正在使用,phpsession store.type但是当我查看域上的 cookie 时,我只看到PHPSESSID并且SimpleSAMLAuthToken

因此,我们尝试将其全部整合到一种方法中。如上所述,只有您从 domain.com/sso/saml 开始,但这次循环不断重复。用户访问我们的域,被重定向到 idP,然后被重定向回我们,然后永远回到 idP。

最终我放弃了。我可以得到回应,$_POST['SAMLResponse']我可以base64_decode()看看它说什么。我将它放入一个SimpleXMLElement对象中并能够使用它。问题是数据是加密的,现在我被困在试图解密它。

我在这些节点中有数据,但不知道如何处理它:

  • samlp:Response->saml:EncryptedAssertion->EncryptedData->KeyInfo->EncryptedKey->X509Data->X509Certificate
  • samlp:Response->saml:EncryptedAssertion->EncryptedData->KeyInfo->EncryptedKey->CipherData->CipherValue
  • samlp:Response->saml:EncryptedAssertion->EncryptedData->CipherData->CipherValue

我不知道如何使用其中的每一个,但我可以验证它X509Certificate是与我的私钥匹配的公钥。我尝试使用不同的键(或我认为的键)解码各种值,但无济于事。

  • samlp:Response->saml:EncryptedAssertion->EncryptedData->KeyInfo->EncryptedKey->EncryptionMethod 建议RSA1_5
  • samlp:Response->saml:EncryptedAssertion->EncryptedData->EncryptionMethod 建议AES256-CBC(我一直在尝试mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $data, "cbc", $iv);,尽管我实际上无法弄清楚我应该放入什么$key$data

理想情况下,我想让它在 SimpleSAMLphp 中完全运行,但老实说,我不知道问题出在哪里,所以我不知道如何对其进行排序。元数据如下所示:

$metadata = array(
    'https://partner.com' => array(
        'SingleSignOnService' => 'https://partner.com/sso/response',
        'SingleLogoutService' => 'https://partner.com/sso/slo',
        'assertion.encryption' => true,
        'certificate' => partner.cer'
    )
);

Authsources 有这个:

$config = array(
    'our-configured-sp' => array(
        'saml:SP',
        'privatekey' => 'my.private.pem',
        'certificate' => 'my.public.cert',
        'idp' => 'https://partner.com',
        'baseurlpath' => 'simplesaml/',
    )
);

有什么帮助吗?最好让整个事情与 SimpleSAMLphp 一起工作,但如果不是,我会接受一些关于如何解密文件的指导。

感谢大家

4

1 回答 1

0

请检查One Login SAML php 库,它有很好的文档和编码。您可以轻松地使用它来处理响应和 getAttributes 做你想做的事。

我知道这个问题很老,但它可能会帮助仍在寻找相同问题的人。

于 2015-08-03T06:08:51.413 回答