Saml Интеграция Ruby (IDP) и Java (SP) - PullRequest
0 голосов
/ 09 апреля 2020

Я внедряю saml SSO. В этом IDP написано в ruby, а SP написано в java. для ruby мы используем saml_idp & ruby -saml gems. Для java я пытаюсь использовать spring-security-saml-dsl. Запрос авторизации saml от SP имеет следующий формат

<?xml version="1.0" encoding="UTF-8"?>
<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceURL="https://localhost:9090/saml/SSO" Destination="https://localhost:3000/sso/saml" ForceAuthn="false" ID="a1g952c8gehic8503id5fbdi1cchhic" IsPassive="false" IssueInstant="2020-04-09T09:08:06.814Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0"><saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://localhost:9090/saml/metadata</saml2: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="#a1g952c8gehic8503id5fbdi1cchhic"><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>59Sqiz0XoMFOwgquHILLLnmtzb0=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>sign</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>cert</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature>
</saml2p:AuthnRequest>

Но это не принимается IDP. После исследования я обнаружил, что IDP разрешает, если формат указан ниже

<samlp:AuthnRequest xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceURL="http://localhost:8000/saml/acs" Destination="http://localhost:3050/saml/saml_assertion" ID="_06f89146-44ad-48e3-9110-cf068b7cd639" IssueInstant="2020-04-09T07:15:16Z" Version="2.0">
  <saml:Issuer>http://localhost:3050/saml/metadata</saml:Issuer>
  <samlp:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"/>
</samlp:AuthnRequest>

Как сделать так, чтобы Spring-security-saml-dsl (java SP) отправлял в формате 'samlp', а не 'saml2p'? или как сделать так, чтобы saml_idp (ruby IDP) принимал формат 'saml2p'?

1 Ответ

0 голосов
/ 11 апреля 2020

Я был совершенно не прав в моей настройке. отсюда и проблема. Эти библиотеки (saml_idp & ruby -saml) принимают префиксы как samlp, так и saml2p. Я создал saml AuthnRequest с привязкой HTTP-POST в моем SP и передал это IDP вручную для тестирования. В IDP SamlIdp :: Controller.decode_request используется для декодирования этого запроса. Это частично расшифровывало запрос. Отсюда и проблема.

Когда я перешел с привязки HTTP-POST на привязку HTTP-Redirect Это начало работать. Кажется, этот SamlIdp :: Controller.decode_request ожидает, что AuthnRequest будет сжат, что происходит в привязке HTTP-Redirect. Теперь я могу успешно интегрировать как SP, так и IDP.

...