第一次尝试将 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 一起工作,但如果不是,我会接受一些关于如何解密文件的指导。
感谢大家