簡體   English   中英

如何使用PHP解碼來自idP的加密SAML響應?

[英]How to decode encrypted SAML response from idP with PHP?

第一次嘗試將SAML實施為SP。 我們決定嘗試在定制的MVC框架中使用SimpleSAMLphp,因為我們認為這樣做可以節省時間。

我遇到的問題是我陷入無限循環或屬性為空。

我已經配置了元數據,並從SimpleSAMLphp中的authenticate接口對其進行了測試。 idP的回發URL集與我們開始時的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')創建一個新實例),當我們執行$as->getAttributes()時,該實例為空數組。 我們正在使用phpsession store.type但是當我查看域上的cookie時,我只會看到PHPSESSIDSimpleSAMLAuthToken

因此,我們嘗試將所有內容整合為一種方法。 如上所述,只有您從domain.com/sso/saml開始,除了這次循環不斷重復。 用戶點擊我們的域,重定向到idP,然后重定向回我們,然后再重定向回idP,直到永遠。

最終我放棄了。 我可以在$_POST['SAMLResponse']獲得響應,並且可以base64_decode()來查看其內容。 我將其放入SimpleXMLElement對象中並能夠使用它。 問題在於數據是加密的,現在我被困在嘗試對其解密。

我在這些節點中有數據,但不知道該如何處理:

  • samlp:響應-> saml:EncryptedAssertion-> EncryptedData-> KeyInfo-> EncryptedKey-> X509Data-> X509Certificate
  • 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:Response-> saml:EncryptedAssertion-> EncryptedData-> EncryptionMethod建議使用AES256-CBC (我一直在嘗試mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $data, "cbc", $iv);盡管我實際上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一起使用,但是如果沒有,我將對如何解密文件采取一些指導。

感謝大家

請檢查一個登錄 SAML php庫,該文件已被很好地記錄和編碼。 您可以輕松地使用它來處理response和getAttributes做您想要的事情。

我知道這個問題很舊,但這可能會幫助仍在尋找相同問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM