Как да декодирам шифрован SAML отговор от idP с PHP?

За първи път се опитвам да внедря SAML като SP. Решихме да опитаме да използваме SimpleSAMLphp с нашата MVC рамка по поръчка, тъй като решихме, че ще ни спести време.

Проблемът, който имам, е, че попадам в безкраен цикъл или атрибутите са празни.

Конфигурирах своите метаданни и ги тествах от интерфейса за удостоверяване в SimpleSAMLphp. 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'), например) и когато направим $as->getAttributes(), това е празен масив. Ние използваме phpsession store.type, но когато гледам бисквитките в домейна, виждам само PHPSESSID и SimpleSAMLAuthToken

Така че се опитахме да поставим всичко в един метод. Както по-горе, само вие започвате от domain.com/sso/saml, но този път цикълът продължава отново и отново. Потребителят попада на нашия домейн, пренасочва се към idP, след това се пренасочва обратно към нас, след това обратно към idP, завинаги.

В крайна сметка се отказах. Мога да получа отговора в$_POST['SAMLResponse'] и мога да го base64_decode(), за да видя какво пише. Сложих го в обект SimpleXMLElement и успях да работя с него. Проблемът е, че данните са криптирани и сега съм заседнал в опит да ги дешифрирам.

Имам данни в тези възли, но не знам какво да правя с тях:

  • 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_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, но ако не, ще взема малко насоки как да дешифрирам файла.

Благодаря на всички


person Engineer81    schedule 20.08.2013    source източник


Отговори (1)


Моля, проверете SAML php библиотеката One ​​Login, тя е добре документирана и кодирана. Можете лесно да го използвате, за да обработвате Response и getAttributes да правят това, което искате.

Знам, че въпросът е стар, но може да помогне на някой, който все още търси същото.

person Irfan.gwb    schedule 03.08.2015
comment
Опитахме One Login и се оказа, че не поддържа нещо, което трябваше... Не си спомням какво беше, защото беше преди почти две години, но не работи... Иска ми се спомни си какво беше. Може да е липсвала поддръжка за криптирани полезни товари по това време? Направихме SimpleSAMLphp работещ, имайте предвид, но се надявах да управлявам всичко това без нужда от библиотека, която е по-голяма от цялото ни приложение - person Engineer81; 03.08.2015