Проверить инициированный IDP ответ SAML2.0

Эксперты SAML, пожалуйста, помогите!!!!

Я очень новичок в SAML и JSP. Я хочу проверить токен ответа SAML, инициированный IDP (поставщиком удостоверений), с использованием библиотеки Opensaml в java (среда linux, Tomcat6.0) и получить отправленную информацию об атрибутах, такую ​​​​как идентификатор пользователя, имя пользователя, электронная почта. Ответ SAML не зашифрован, и у меня есть сертификат доверия idp, установленный в моем хранилище ключей Java. Профиль токена SAML — это «SSO веб-браузера», и он использует привязку HTTP-POST. В сертификате есть открытый ключ. Нужен ли мне закрытый ключ для проверки? Каковы шаги для нужно сделать для успешной проверки?Просто проверки цифровой подписи достаточно, чтобы доверять источнику?Должен ли я сделать проверку профиля или что-то еще? Ниже приведен ответ SAML, который я получу от IDP. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация? Извините, если я не дал достаточно информации. Пожалуйста, помогите мне... Заранее спасибо.

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="XYZ" Version="2.0" IssueInstant="2013-07-10T16:43:54Z" Destination="http://www.testsp.com">
  <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://www.testidp.com:8080/opensso</saml:Issuer> 
- <samlp:Status xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <samlp:StatusCode xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Value="urn:oasis:names:tc:SAML:2.0:status:Success" /> 
  </samlp:Status>
- <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="xyz" IssueInstant="2013-07-10T16:43:51Z" Version="2.0">
  <saml:Issuer>http://www.testidp.com:8080/opensso</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="#xyz">
- <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>...hdfb3454jh545dfbj545423df....=</ds:DigestValue> 
  </ds:Reference>
  </ds:SignedInfo>
  <ds:SignatureValue>..................hsdgysgdyyusgfdfb98738e43hjrg874y474h7y8r............=</ds:SignatureValue> 
- <ds:KeyInfo>
- <ds:X509Data>
  <ds:X509Certificate>............./KPm0qLP8vCOhyI76AUE6jL NFeTlcAe3B6hOdfKCiu+EtHeZC2i/8jf1rHDNPey4TS1MQj/.......
</ds:X509Certificate> 
  </ds:X509Data>
  </ds:KeyInfo>
  </ds:Signature>
- <saml:Subject>
  <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" NameQualifier="http://www.testidp.com:8080/opensso" SPNameQualifier="http://www.testsp.com">....Zeq8NhJKRKDXUwx67ytuynwj4n...</saml:NameID> 
- <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
  <saml:SubjectConfirmationData NotOnOrAfter="2013-07-10T16:53:51Z" Recipient="http://www.testsaml.com/tespsamlmodule" /> 
  </saml:SubjectConfirmation>
  </saml:Subject>
- <saml:Conditions NotBefore="2013-07-10T16:33:51Z" NotOnOrAfter="2013-07-10T16:53:51Z">
- <saml:AudienceRestriction>
  <saml:Audience>http://www.testsaml.com/tespsamlmodule</saml:Audience> 
  </saml:AudienceRestriction>
  </saml:Conditions>
- <saml:AuthnStatement AuthnInstant="2013-07-10T16:36:35Z" SessionIndex="......erer54t54y45y75666y65y65y....">
- <saml:AuthnContext>
  <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef> 
  </saml:AuthnContext>
  </saml:AuthnStatement>
- <saml:AttributeStatement>
- <saml:Attribute Name="UID">
  <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">ab123</saml:AttributeValue> 
  </saml:Attribute>
- <saml:Attribute Name="uname">
  <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">robert</saml:AttributeValue> 
  </saml:Attribute>
- <saml:Attribute Name="EmailAddress">
  <saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">[email protected]</saml:AttributeValue> 
  </saml:Attribute>
  </saml:AttributeStatement>
  </saml:Assertion>
  </samlp:Response>

person Ramesh Kumar    schedule 25.07.2013    source источник
comment
stackoverflow.com/questions/34579742/ полезное и связанное   -  person Cris Rockwell    schedule 06.05.2020


Ответы (2)


Вам необходимо проверить ответ в соответствии со спецификацией SAML. В OpenSAML есть некоторые функции для этого, но я думаю, что самый безопасный вариант — написать свой собственный код проверки. видеть. http://marc.info/?t=137354098500007&r=1&w=2

Вы также должны подтвердить подпись. Как и при любой проверке подписи, вы используете открытый ключ. Вот что я написал в своем блоге о проверке подписи OpenSAML. http://mylifewithjava.blogspot.no/2012/11/verifying-signatures-with-opensaml.html

Подробнее о подписи и шифровании с использованием OpenSAML я рассказал в своей книге A Guide to OpenSAML< /а>

person Stefan Rasmusson    schedule 01.08.2013
comment
Привет, Стефан, твой блог потрясающий !!!! Теперь у меня есть рабочий SAML SP. В соответствии с требованиями моего клиента я выполняю проверку подписи, проверку ссылок и проверку условий ответа, чтобы разрешить доступ к веб-порталу. - person Ramesh Kumar; 15.08.2013

Вот шаги, которые я выполнил, чтобы реализовать функцию единого входа в моем веб-приложении для ответа SAML, инициированного IDP.

Необходимо:

  1. Импортируйте все необходимые и зависимые файлы jar для библиотеки java opensaml.
  2. Загрузите цифровой сертификат IDP в хранилище ключей Java.
  3. Создайте файл JSP, отвечающий за аутентификацию SAML на вашем сервере.
  4. Выполните различные типы проверки полученного сообщения SAML, чтобы гарантировать источник (проверка подписи), целостность сообщения (проверка ссылки) и проверка утверждения (проверка времени действия утверждения).

Код. В этом блоге приведен отличный пример, который поможет вам создать собственную установку SAML SP.

http://mylifewithjava.blogspot.no/2012/11/verifying-signatures-with-opensaml.html

Загрузите все необходимые файлы jar из их архива, что сэкономит вам много времени при загрузке зависимой версии jar. http://www.capcourse.com/Library/OpenSAML

person Ramesh Kumar    schedule 20.09.2013