2013-08-20 81 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工作,但我希望能夠管理這一切,而不需要比我們整個應用程序更大的庫 –