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