SAML Response для приложений Google - PullRequest
0 голосов
/ 12 августа 2011

Я пытаюсь заставить работать Google Apps SAML, я получаю: Google Apps - к этому аккаунту невозможно получить доступ, поскольку мы не смогли проанализировать запрос на вход.

Вот мой дословный ответ:


<?xml version="1.0"?><br/><samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="pfx9c11a3a9-13dc-ff78-7d18-12f795fab19d" Version="2.0" IssueInstant="2011-08-11T05:24:35Z" Destination="https://www.google.com/a/sparxlabs.com/acs" InResponseTo="idnffilcgaeeonionahcpciplkhhhkmlfedkpipl"><br/>  <saml:Issuer>http://saml.sparxlabs.com/</saml:Issuer><br/>        <ds:Signature xmlns="http://www.w3.org/2000/09/xmldsig#">      <br/>      <ds:SignedInfo><br/>          <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><br/>            <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><br/>            <ds:Reference URI=""><br/>              <ds:Transforms><br/>                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><br/>                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><br/>              </ds:Transforms><br/>              <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><br/>              <ds:DigestValue>Y2E3ZWIyZGEwODFjYjdhZmJjMTZlYmI1NjA4N2IxYzYwMTM5YmEyMA==</ds:DigestValue><br/>            </ds:Reference><br/>       </ds:SignedInfo><br/>       <ds:SignatureValue>Eno0HWCgNgxeUhCP0khdEGuLDP3etgzAoKBiK84ENs1ealpgBEOhFTDQQC8qODbAZVxTFYjQLTcW5A7OJ2n02S5tLmg57TeL4+VWyzhwaV9KQ9e1ZU7ZMhPV5aNL4Qm8EIvDyRbPx7mWW70wK1fO+IlPsmxZraL982neOJ8vucc=</ds:SignatureValue><br/>        <ds:KeyInfo><br/>            <ds:X509Data><br/>              <ds:X509Certificate>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNzRENDQWhtZ0F3SUJBZ0lKQUtYZ0tjTy90RktuTUEwR0NTcUdTSWIzRFFFQkJRVUFNRVV4Q3pBSkJnTlYKQkFZVEFrRlZNUk13RVFZRFZRUUlFd3BUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLRXhoSmJuUmxjbTVsZENCWAphV1JuYVhSeklGQjBlU0JNZEdRd0hoY05NVEV3T0RFeE1qRXhOelF5V2hjTk1URXdPVEV3TWpFeE56UXlXakJGCk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2hNWVNXNTAKWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQgpnUUMwVTVlVnkxWXJQTXdCNTJvUmk2OFY3cmFWUzR2V1hEd2VQL20wTUwxRkVDL3BUNmxVU01iRUJuWnVranlRClhBOFBrbTkvWFhPcERuU01XN0ZRNXczOUZSeFExY2ZWVXI3dlV6RXNrbm5Sb1p4NXBEck8ybTVVQ25VUFJtNGYKTkljVDRzdERTODAxVzRET24vOEFTUUhKQ1dnTDYwUC9RUGhvU3pmMXVqY1E1UUlEQVFBQm80R25NSUdrTUIwRwpBMVVkRGdRV0JCVDVYbjA1VTdrU3NQbEQyd05yOGlLUTdhQXpYVEIxQmdOVkhTTUViakJzZ0JUNVhuMDVVN2tTCnNQbEQyd05yOGlLUTdhQXpYYUZKcEVjd1JURUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdUQ2xOdmJXVXQKVTNSaGRHVXhJVEFmQmdOVkJBb1RHRWx1ZEdWeWJtVjBJRmRwWkdkcGRITWdVSFI1SUV4MFpJSUpBS1hnS2NPLwp0RktuTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFzZkYwS0h2T0h6emFoRWd4Cit1NmJJUTRldkxYaXB4VnVYNlZ2RnYxd1BSTmtIRWZEWk9HdmJZc1p1ak5VUVFGdXFzRGR2M3lHelJLQXozRVAKd1RoY29pdEN1cWQrT2dlNGdTNkhpaHBCSzU3cmFaMlpad0NxWXpyQldMMjhaZnFhQW5zNy9KNkY3TEZIeEMvcQpnK25HSldINlVycGpZTGJqajJjMFN0VGVIVTg9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</ds:X509Certificate><br/>            </ds:X509Data><br/>        </ds:KeyInfo><br/></ds:Signature><br/><samlp:Status><br/>    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/><br/>  </samlp:Status><br/><saml:Assertion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" ID="pfx9c11a3a9-13dc-ff78-7d18-12f795fab19d" Version="2.0" IssueInstant="2011-08-11T05:24:35Z"><br/>    <saml:Issuer>http://saml.sparxlabs.com</saml:Issuer><br/>          <ds:Signature xmlns="http://www.w3.org/2000/09/xmldsig#">      <br/>      <ds:SignedInfo><br/>          <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><br/>            <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><br/>            <ds:Reference URI=""><br/>              <ds:Transforms><br/>                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><br/>                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><br/>              </ds:Transforms><br/>              <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><br/>              <ds:DigestValue>ZWRhZGEzYjE4NmZjNWU2ZWE0NDI1NjBkZTFkYzhmN2YzY2QwZGZiMA==</ds:DigestValue><br/>            </ds:Reference><br/>       </ds:SignedInfo><br/>       <ds:SignatureValue>QueL4xlp3NOUJou7mIKERgtPRSJboeht9gFfDcOuhmYvh6uyDsk6UR2GLLb0smkuzuy7cgz0MwzjZ4QdhCyIozOyl1TqUqOvISfNV/w0Wx02Sphi0AQJs/R9S9nv+xbVX5dIgjXbf8N/DYgjSMeACSPzpyoeXpHfedY43HsoMZo=</ds:SignatureValue><br/>        <ds:KeyInfo><br/>            <ds:X509Data><br/>              <ds:X509Certificate>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNzRENDQWhtZ0F3SUJBZ0lKQUtYZ0tjTy90RktuTUEwR0NTcUdTSWIzRFFFQkJRVUFNRVV4Q3pBSkJnTlYKQkFZVEFrRlZNUk13RVFZRFZRUUlFd3BUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLRXhoSmJuUmxjbTVsZENCWAphV1JuYVhSeklGQjBlU0JNZEdRd0hoY05NVEV3T0RFeE1qRXhOelF5V2hjTk1URXdPVEV3TWpFeE56UXlXakJGCk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2hNWVNXNTAKWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQgpnUUMwVTVlVnkxWXJQTXdCNTJvUmk2OFY3cmFWUzR2V1hEd2VQL20wTUwxRkVDL3BUNmxVU01iRUJuWnVranlRClhBOFBrbTkvWFhPcERuU01XN0ZRNXczOUZSeFExY2ZWVXI3dlV6RXNrbm5Sb1p4NXBEck8ybTVVQ25VUFJtNGYKTkljVDRzdERTODAxVzRET24vOEFTUUhKQ1dnTDYwUC9RUGhvU3pmMXVqY1E1UUlEQVFBQm80R25NSUdrTUIwRwpBMVVkRGdRV0JCVDVYbjA1VTdrU3NQbEQyd05yOGlLUTdhQXpYVEIxQmdOVkhTTUViakJzZ0JUNVhuMDVVN2tTCnNQbEQyd05yOGlLUTdhQXpYYUZKcEVjd1JURUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdUQ2xOdmJXVXQKVTNSaGRHVXhJVEFmQmdOVkJBb1RHRWx1ZEdWeWJtVjBJRmRwWkdkcGRITWdVSFI1SUV4MFpJSUpBS1hnS2NPLwp0RktuTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFzZkYwS0h2T0h6emFoRWd4Cit1NmJJUTRldkxYaXB4VnVYNlZ2RnYxd1BSTmtIRWZEWk9HdmJZc1p1ak5VUVFGdXFzRGR2M3lHelJLQXozRVAKd1RoY29pdEN1cWQrT2dlNGdTNkhpaHBCSzU3cmFaMlpad0NxWXpyQldMMjhaZnFhQW5zNy9KNkY3TEZIeEMvcQpnK25HSldINlVycGpZTGJqajJjMFN0VGVIVTg9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</ds:X509Certificate><br/>            </ds:X509Data><br/>        </ds:KeyInfo><br/></ds:Signature><br/><saml:Subject><br/>      <saml:NameID SPNameQualifier="google.com" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:email">admin</saml:NameID><br/>      <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><br/>        <saml:SubjectConfirmationData NotOnOrAfter="2011-08-11T06:24:35Z" Recipient="https://www.google.com/a/sparxlabs.com/acs" InResponseTo="idnffilcgaeeonionahcpciplkhhhkmlfedkpipl"/><br/>      </saml:SubjectConfirmation><br/>    </saml:Subject><br/>    <saml:Conditions NotBefore="2011-08-11T05:24:35Z" NotOnOrAfter="2011-08-11T06:24:35Z"><br/>      <saml:AudienceRestriction><br/>        <saml:Audience>google.com</saml:Audience><br/>      </saml:AudienceRestriction><br/>    </saml:Conditions><br/>    <saml:AuthnStatement AuthnInstant="2011-08-11T05:24:35Z" SessionNotOnOrAfter="2011-08-11T06:24:35Z" SessionIndex="_e409f914997c09cfb1a4dbe461a660209eba5d94ec"><br/>      <saml:AuthnContext><br/>        <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef><br/>      </saml:AuthnContext><br/>    </saml:AuthnStatement><br/>  </saml:Assertion><br/><br/></samlp:Response>

Еще немного важной информации:

1 .. Сертификат X509, который я получаю как:


      cert = OpenSSL::PKey::RSA.new(File.read("dsacert.pem"))
      [cert.to_s].pack("m").gsub(/\n/, "") #Base64 encode

2 .. Значение дайджеста:


 canonical = canonical_form(element)
 sha1 = Digest::SHA1.hexdigest(canonical)
 [sha1].pack("m").gsub(/\n/, "") #Base64 encode

3 .. Наконец, подпись (digest_value, которую я рассчитал выше):


     p key = OpenSSL::PKey::RSA.new(File.read("rsaprivkey.pem"))
     sig = pkey.sign(OpenSSL::Digest::SHA1.new, digest_value)
     [sig].pack("m").gsub(/\n/, "") #Base64 encode

Если я что-то пропустил, дайте мне знать вкомментарии я обновлю.

Ответы [ 3 ]

2 голосов
/ 12 августа 2011

Беглый взгляд. Я не верю, что Google поддерживает подписи как в ответе, так и в утверждении.Я бы упростил настройку, удалив подпись из утверждения и оставив Ответ подписанным в качестве первого шага.Вы также можете дважды проверить значение аудитории и посмотреть, является ли "google.com" или "www.google.com/a/sparxlabs.com" ожидаемым значением.

1 голос
/ 04 сентября 2011

Я вижу некоторые моменты, которые могут быть проблемой:

  1. Два идентификационных номера в ваших подписях пусты.Существует двусмысленность, поскольку это подразумевает, что обе подписи охватывают весь XML-документ, что неверно. В спецификации SAML говорится, что вы должны явно указывать на идентификатор подписанного элемента.
  2. Кажется, что вы публикуете кодпредположить, что это индивидуальный ответ.Генерация XML-подписи в конверте не так проста, как ее нужно встраивать в тот момент, когда вы подписываете документ.
  3. Канонизация применяется только для вас.Вам также следует применить два преобразования, указанные в подписи.
  4. Как указано там , элемент Audience должен указывать на EntityID вашей ACS, как предложил Ян.Также возможно, что "google.com" принят, но это является нарушением спецификаций SAML 2.0.
  5. Ваш атрибут NameID кажется странным, это должен быть адрес электронной почты.В предыдущей ссылке приведен пример допустимого элемента NameID.

Если вы хотите создать пользовательский ответ, вам следует начать с неподписанного шаблона, а затем применить XML DSIG сспециальная библиотека, такая как XML :: Sig.Этого должно быть достаточно, чтобы подписать Утверждение или Ответ.

Надеюсь, это поможет ..

0 голосов
/ 28 октября 2011

все, на что указывал sk_, верно, но также:

  • НИКОГДА не включайте объявление xml в сообщение samlResponse
  • Ваше значение дайджеста неверно, оно должно быть base64 изBINARY дайджест, а не HEX форма
  • Я не знаю ruby, но подпись такая же, как дайджест, b64 (BINARY-RSA-SHA1 (elem))
  • Этоканоническая форма целого, которую вы должны подписать, а не только дайджест
  • не забудьте base64 кодировать весь samlResponse перед отправкой по пост-привязке
  • и не трогатьBIT из параметра relaystate, просто отправьте его как есть

Также вы можете проверить свою подпись xmldsig (xll-and-life-saver) xmlsec1 tool

И никогда не забывайте:Xml Отстой, c14n / xmldsig МОРОНИК!

Боже, удачи!

...