2013-08-20 46 views
2

首次尝试将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()它是一个空阵列。我们使用的phpsessionstore.type但是当我看饼干的领域我只看到PHPSESSIDSimpleSAMLAuthToken

因此,我们试图把所有到一个方法。如上所述,只有你从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一起工作,但如果没有,我会就如何解密文件采取一些指导。

谢谢大家

回答

0

请检查One Login SAML PHP库,这是有据可查和编码。你可以很容易地使用它来processResponse和getAttributes做你想做的。

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

+0

我们尝试了一次登录,结果证明它不支持我们需要的东西......我不记得它是什么,因为它差不多是两年前,但它不起作用......希望我能记得它是什么。当时可能已经支持加密的有效载荷了?我们确实让SimpleSAMLphp工作,但我希望能够管理这一切,而不需要比我们整个应用程序更大的库 –