За първи път се опитвам да внедря 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, но ако не, ще взема малко насоки как да дешифрирам файла.
Благодаря на всички