Валидирайте SAML2.0 отговора, иницииран от IDP

SAML експерти, моля, помогнете!!!!

Съвсем нов съм в SAML и JSP. Искам да потвърдя IDP (доставчик на идентичност), иницииран SAML токен за отговор, като използвам 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 в моята книга, Ръководство за OpenSAML

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

Ето стъпките, които последвах, за да внедря функцията за единично влизане в моето уеб приложение за IDP иницииран SAML отговор.

Предварителни изисквания:

  1. Импортирайте всички необходими и зависими jar файлове за opensaml java библиотека.
  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