Я получаю запрос SAML связывание содержания запроса SAML выглядит как этоКак проверить подпись SAML для HTTP-редиректа связывания
{ «SigAlg» => «http://www.w3.org/2000/09/xmldsig#rsa-sha1» с помощью HTTP-редиректа , "SAMLRequest" => "lVLLaoQwFP0VyT5jEqPG4AiFoSDMtNApXXQzxDxaQRObRDqfX3XoolAKXd7DPQ/uuXUQ4zDxo3tzc3zSH7MOMWkPe3DpcixzVVVQl4RBqoiCncEYEmkoY7k00hCQvGgfemf3gOwQSNoQZt3aEIWNC4RwCRGGiD6jkmPMs2KHUPYKksPi0lsRN + Z7jFPgafqpvejtbtQpSK7jYAPfsu3B7C13IvSBWzHqwKPk57vTkS + WfPIuOukG0NSbub9R/yaJELRfzUGzrhmtFut15qdeeheciY926K2u05toUz8sIu0huXd + FPFv9RXpFTTbKp/WA4WobQT/jEYrykwhNaQ66yDNMwY7wijEtMCmysqqo6xOb8Ga + tbjWYe1jtYqfW0uCucoYwWCHS3F0kRGoajWTpAiiJRZJRmu01 + Y3 + CPt2i + АА =="}
Она также имеет значение подписи
WkDaGzC6vPTlzh + EnFA5/8IMmV7LviyRh2DA5EHF0K0nl + xzBlKfNCYRnunpwoEvGhereGdI5xBpv + mc9IguiCaLZSZjDh6lIDdpvctCnmSNzORqzWQwQGeZ9vjgtCLjUn35VZLNs3WgEqbi2cL + ObrUDS2gV1XvBA3Q3RRhoDmi + XE89Ztnd1cNpR3XdA + EL2ENbMI2XAD9qSgMufUJY/3GBBpT7Vg1ODtPxBudq + sXrgPh/+ WtUUitLkkfC8tdRTCS1EZPv + h27I5g/VNza23Xl8w2HdAuYP0F2FjREo8VV2aUtaOUd/jAF9 + bfkGV93y1PzFttLxdBbFoxp6qBg ==
Но я не понимаю, как проверить правильность этой подписи.
Раздел 3.4.4.1 на SAML связывания https://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf
To construct the signature, a string consisting of the concatenation of the RelayState (if present),
SigAlg, and SAMLRequest (or SAMLResponse) query string parameters (each one URLencoded)
is constructed in one of the following ways (ordered as below):
SAMLRequest=value&RelayState=value&SigAlg=value
SAMLResponse=value&RelayState=value&SigAlg=value
Я попробовал подход, но
Подпись Я генерироваться с помощью закрытого ключа не совпадает с той, которую я получил от моего SP , (Размещен выше)
Кроме того, я не в состоянии расшифровать подписанное сообщение с помощью секретного ключа (я предполагаю, что подпись была создана с помощью общественности, что я федеративного это с.)
<samlp:LogoutRequest ID="_36167d94-d868-4c04-aee3-8bbd4ed91317" Version="2.0" IssueInstant="2017-01-05T16:21:55.704Z" Destination="https://werain.me/" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"><Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">urn:federation:MicrosoftOnline</Issuer><NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">4948f6ce-4e3b-4538-b284-1461f9379b48</NameID><samlp:SessionIndex>_eafbb730-b590-0134-a918-00d202739c81</samlp:SessionIndex></samlp:LogoutRequest>
Любая помощь здесь.
пара вещей. Во-первых, это 'LogoutRequest', а не SAML' AuthRequest' (я думаю, я забыл упомянуть об этом). Вторая. Связывание - это перенаправление HTTP, а не HTTP-POST, см. РАЗДЕЛ 3.4.4.1 привязок SAML. – Ratatouille
Также исправьте меня, если я ошибаюсь, но это так, как подпись и проверка SAML работают правильно. IDP (имеет собственную партию public/private) SP (имеет собственную партию public/private). Если IDP должен подписать данные, которые он подписывает, используя собственный личный ключ. SP может затем расшифровать данные знака с помощью Public/cert IDP (совместно используемого через метаданные IDP). Как и мудрый, если SP должен подписывать данные, которые он делает, используя собственный личный ключ, тогда IDP расшифровывает его, используя Public/Cert SP (доступный через метаданные SP) – Ratatouille
'AuthRequest' просто был примером. Модель подписи для IdP & SP верна. Только термин 'decrypt' не подходит. Сообщение подписано, а не зашифровано (содержимое не скрыто), а операция проверки с открытым ключом - 'проверка' – pedrofb