如何用PHP解码来自idP的加密SAML响应?
第一次尝试将SAML实现为SP。我们决定尝试在定制的MVC框架中使用SimpleSAMLphp,因为我们认为这样可以节省时间 我遇到的问题是,我最终进入了一个无限循环,或者属性是空的 我已经在SimpleSAMLphp中配置了元数据并从authenticate接口对其进行了测试。idP有一个回发URL集,与我们开始的位置不同,因此:如何用PHP解码来自idP的加密SAML响应?,php,single-sign-on,saml,Php,Single Sign On,Saml,第一次尝试将SAML实现为SP。我们决定尝试在定制的MVC框架中使用SimpleSAMLphp,因为我们认为这样可以节省时间 我遇到的问题是,我最终进入了一个无限循环,或者属性是空的 我已经在SimpleSAMLphp中配置了元数据并从authenticate接口对其进行了测试。idP有一个回发URL集,与我们开始的位置不同,因此: 用户点击domain.com/sso我们创建了新的SimpleSAML\u Auth\u Simple('our-configured-sp') 调用$as->r
- 用户点击domain.com/sso我们创建了新的
SimpleSAML\u Auth\u Simple('our-configured-sp')
- 调用
$as->requireAuth()
- 客户端被重定向到idP
- idP将用户重定向回domain.com/sso/saml
$as=new SimpleSAML\u Auth\u Simple('our-configured-sp')
),当我们这样做时,$as->getAttributes()
它是一个空数组。我们正在使用phpsession
存储。键入
,但当我查看域上的cookie时,我只看到PHPSESSID
和simplesamlauthortoken
所以我们试着把它全部放在一个方法中。如上所述,只有您从domain.com/sso/saml开始,但这次循环会不断重复。用户访问我们的域,被重定向到idP,然后重定向回我们,然后再返回idP,直到永远
最终我放弃了。我可以在$\u POST['SAMLResponse']
中获得响应,我可以base64\u decode()
查看它的内容。我将它放入一个simplexmlement
对象中,并能够使用它。问题是数据是加密的,现在我一直在尝试解密它
我在这些节点中有数据,但不知道如何处理:
- 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\u-RIJNDAEL\u解密(mcrypt\u-RIJNDAEL\u 256,$key,$data,$CBC,$iv);
或$key
)$data
$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完成整个工作,如果不是,我会接受一些关于如何解密文件的指导
谢谢大家请查看SAML php库,它有很好的文档和代码。您可以轻松地使用它来processResponse,getAttributes可以做您想做的事情
我知道这个问题由来已久,但它可能会帮助仍在寻找相同问题的人。我们尝试了一次登录,结果发现它不支持我们需要的东西。。。我不记得那是什么了,因为那几乎是两年前的事了,但它不起作用。。。但愿我能记得那是什么。当时可能缺少对加密有效载荷的支持?我们确实让SimpleSAMLphp在您的头脑中工作,但我希望在不需要比整个应用程序更大的库的情况下管理它