2016-11-03 8 views
1

Привет У меня есть этот XML как SAML2 ответ от моего IDP:OpenSAML как проверить, действительно ли ответ SAML (подпись/сертификат) на моем IDP?

<Assertion ID="_97031c65-0139-4047-a416-9495df5d6ed7" 
    IssueInstant="2016-10-26T07:45:43.438Z" Version="2.0" 
    xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> 
    <Issuer> 
    </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/2001/04/xmldsig-more#rsa-sha256" /> 
      <ds:Reference URI="#_97031c65-0139-4047-a416-9495df5d6ed7"> 
       <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/2001/04/xmlenc#sha256" /> 
       <ds:DigestValue> 
        KMaF... 
       </ds:DigestValue> 
      </ds:Reference> 
     </ds:SignedInfo> 
     <ds:SignatureValue> 
      FHdZ.... 
     </ds:SignatureValue> 
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
      <X509Data> 
       <X509Certificate> 
        MII.... 
       </X509Certificate> 
      </X509Data> 
     </KeyInfo> 
    </ds:Signature> 
    .... 

Теперь я хочу, чтобы проверить, является ли ответ правильным ответом от моего IDP. Как это может быть сделано? (Я использую OpenSAML 3.x java) Достаточно ли просто провести сравнение строк с подписью и сертификатом?

У меня также есть MetadataDocument.XML с данными учетных данных из моего IDP (Azure).

Похожие:
SAML 2.0 - How to verify the sender certificate?

OpenSAML (2.0) Signature validation not working

ответ

2

Первые вещи сначала:

Не свернуть свою собственную реализацию SAML. Есть слишком много вещей, вы можете ошибаться, что это не стоит риска. Я не знаю, могу ли я это подчеркнуть. Используйте открытый источник, хорошо известны и испытаны реализации как Shibboleth SP или simplesamlphp

Предупреждение выше в сторону, и если вы делаете это для вашего собственного понимания, а не как часть продукта/услуги, которые будут доступны для всех, кроме вас:

Способ проверки того, что ответ приходит от вашего IDP, заключается в проверке цифровой подписи. Для этого вы должны использовать открытый ключ IDP (который содержится в сертификате IDP, который вы знаете из метаданных IDP), чтобы проверить цифровую подпись. Пожалуйста, прочитайте о Digital Signatures, Digital Signature verification, чтобы понять, что нужно делать и почему. Затем вы можете продолжить, как это сделать, прочитав Official Documetnation. Некоторые примечания:

  • Не доверяйте сертификат, который поставляется с SAML утверждения. Это только для случая, когда вы знаете несколько сертификатов для данной доверяющей стороны, и вам нужно выбрать тот, который применяется к конкретному разговору SAML.
  • Вы не можете сравнивать String на Подписи. Вы не можете вычислить такую ​​же подпись, как у вас нет личного ключа, который IdP использовал для его создания.
+0

Привет, я использую OpenSAML для этой цели. У меня уже есть функциональный логин, но из-за некоторых обстоятельств и причин безопасности нам необходимо проверить ответ SAML, полученный от входа в IDP не только в нашем пользовательском агенте, но и на нашем сервере ресурсов, когда запрашивается ресурс. – Gobliins

+0

Настоящий вход в систему SAML выполняется метеорными счетами. Наша идея состояла в том, чтобы отправить ответ вместе с запросом на наш сервер ресурсов и выполнить ручную проверку OpenSAML, чтобы проверить, поступает ли запрос из надежного источника (нашего пользовательского агента). – Gobliins

+0

Я не уверен, что я последую за тобой. Я не знаком с тем, что такое метеоритные счета. Сказать, что логин функционирует без проверки подписи, это похоже на то, что логин имени пользователя/пароля работает, но вы не проверяете правильность пароля. Вам нужно будет отредактировать исходный вопрос, чтобы включить то, что ваша установка и что вы хотите сделать, иначе это слишком сложно, чтобы помочь вам –