Я использую единый вход SAML и использую метод idp для запроса входа в систему. После входа он перенаправляет пользователей по URL-адресу входа, определенному в запросе с ответом SAML в кодировке base64.
Теперь у меня есть извлечение к этому ответу, проверка его и получение значения атрибута, отправленного Idp, такого как адрес электронной почты, имя и т. Д.
Я декодировал из base64 и получил следующий XML. Этот XML имеет зашифрованную подпись, CipherData, сертификат и т. Д., Но не знает, как проверять и декодировать / извлекать значения атрибутов, чтобы мы могли использовать их дальше.
Я ищу это и люблю онлайн инструмент который декодирует его, предоставив закрытый ключ. Я попробовал это и получил значения атрибута.
То же самое я должен сделать в нашем приложении, использующем PHP, и использовать это значение атрибута. Если кто-то сделал то же самое и может пролить свет на это, то это будет действительно оценено.
Пожалуйста, проверьте ответ SAML ниже.
<samlp:Response Version="2.0" ID="vafmraxdfkermx" IssueInstant="2015-07-31T07:26:00.180Z" Destination="http://domain.com/saml/SSO" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">MI-TEST-SAML2-EntityID</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#DLSr8z03t7WZ-F7ZFwbxUw91vQF">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>gnvnDwu/eDBpLnPtiaHeOI7UCD4=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
Signature Value
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
Certifivate Contents
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:EncryptedAssertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<xenc:EncryptedKey>
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"/>
<xenc:CipherData>
<xenc:CipherValue>CIPHER VALUE</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedKey>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>CIPHER CONTETNS</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</saml:EncryptedAssertion>
Онлайн-инструмент, который вы использовали, основан на PHP SAML Toolkit OneLogin [1]. Я реализовал оба.
Прочитайте документацию. ProcessResponse и getAttributes делают то, что вы хотите.
[1] https://github.com/onelogin/php-samlВ зависимости от того, что вы хотите сделать, может быть проще позволить существующему коду обрабатывать все SAML для вас. Для PHP у вас есть SimpleSAMLphp, который можно настроить в качестве поставщика услуг.
SimpleSamlPHP сгенерирует для вас метаданные, использует утверждения SAML и проверяет их. Атрибуты могут быть получены с помощью функции. Увидеть SimpleSAMLphp Сервис-провайдер QuickStart для дополнительной информации.
Ты можешь использовать LightSAML получить закодированный ответ SAML непосредственно из запроса http, десериализовать его в модель данных и расшифровать. Вот пример того, как получить сообщение SAML из HTTP-запроса http://www.lightsaml.com/LightSAML-Core/Cookbook/How-to-receive-SAML-message/ и вот пример того, как расшифровать утверждение http://www.lightsaml.com/LightSAML-Core/Cookbook/How-to-decrypt-Assertion/