首次尝试将SAML作为SP实施。我们决定尝试使用SimpleSAMLphp与我们定制的MVC框架,因为我们认为它会节省我们的时间。如何使用PHP解码来自idP的加密SAML响应?
我遇到的问题是,我最终在一个无限循环或属性为空。
我配置了我的元数据并从SimpleSAMLphp中的authenticate接口对它进行了测试。该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')
,例如)和W如果我们做$as->getAttributes()
它是一个空阵列。我们使用的phpsession
store.type
但是当我看饼干的领域我只看到PHPSESSID
和SimpleSAMLAuthToken
因此,我们试图把所有到一个方法。如上所述,只有你从domain.com/sso/saml开始,除了这一次循环一遍又一遍。用户点击我们的域名,被重定向到IDP,然后重定向到我们,然后回到IDP,永远。
最终我放弃了。我可以在$_POST['SAMLResponse']
得到回应,我可以base64_decode()
看它说什么。我把它放到一个SimpleXMLElement
对象中,并且能够使用它。问题在于数据是加密的,现在我仍然试图解密它。
我在这些节点的数据,但不知道该怎么用它做:
- samlp:响应 - > SAML:EncryptedAssertion-> EncryptedData-> KeyInfo-> EncryptedKey-> X509Data-> X509证书
- samlp:响应 - > SAML:EncryptedAssertion-> EncryptedData-> KeyInfo-> EncryptedKey-> CipherData->的CipherValue
- samlp:响应 - > SAML:EncryptedAssertion-> EncryptedData-> CipherData->的CipherValue
我不知道如何使用其中的每一个,但我可以验证X509Certificate
是与我的私钥匹配的公钥。我尝试了使用不同的键(或者我认为是键)来解码各种值,但无济于事。
- samlp:响应 - > SAML:EncryptedAssertion-> EncryptedData-> KeyInfo-> EncryptedKey-> EncryptionMethod表明
RSA1_5
- samlp:响应 - > SAML:EncryptedAssertion-> EncryptedData-> EncryptionMethod表明
AES256-CBC
(I”一直在试图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一起工作,但如果没有,我会就如何解密文件采取一些指导。
谢谢大家
我们尝试了一次登录,结果证明它不支持我们需要的东西......我不记得它是什么,因为它差不多是两年前,但它不起作用......希望我能记得它是什么。当时可能已经支持加密的有效载荷了?我们确实让SimpleSAMLphp工作,但我希望能够管理这一切,而不需要比我们整个应用程序更大的库 –