2016-12-12 3 views
1

Hallo ich diese Fehlernachricht erhielt:opensaml 3 Signatur von SAML-Antwort ist null

net.shibboleth.utilities.java.support.logic.ConstraintViolationException: Signature was null 

Auf eine SAML-Antwort von Azure AD Validierung.

Für Testzwecke gespeichert i eine Antwortdatei als XML und fand einen tag:

<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> 
        KMaFHRt8inqVYsMGKnAryKUTQUbYGPUDPxdvj6T08OQ= 
       </ds:DigestValue> 
      </ds:Reference> 
     </ds:SignedInfo> 
     <ds:SignatureValue> 
      ..... 
     </ds:SignatureValue> 
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
      <X509Data> 
       <X509Certificate> 
        .... 
       </X509Certificate> 
      </X509Data> 
     </KeyInfo> 
    </ds:Signature> 

i die XML-Antwort entordnen:

InitializationService.initialize(); 
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
documentBuilderFactory.setNamespaceAware(true); 
DocumentBuilder docBuilder = documentBuilderFactory.newDocumentBuilder(); 
String content = new String(Files.readAllBytes(Paths.get("saml_response_azure.xml"))); 
Document document = docBuilder.parse(new ByteArrayInputStream(content.trim().getBytes())); 

Element element = document.getDocumentElement(); 
Unmarshaller unmarshaller = XMLObjectProviderRegistrySupport.getUnmarshallerFactory().getUnmarshaller(element); 
Response response = (Response) unmarshaller.unmarshall(element); 

Und Fehler fallen gelassen an:

Signature signature = response.getAssertions().get(0).getSignature() // returns null 

SAMLSignatureProfileValidator profValidator = new SAMLSignatureProfileValidator(); 
profValidator.validate(signature); 
+0

Können Sie die gesamte Antwort irgendwo bereitstellen? gist zum Beispiel –

+0

https://gist.github.com/Gobliins/26d8f760f120430eaeb29c223f2e436f Ich habe die Anmeldeinformationen mit einigen zufälligen Informationen – Gobliins

+0

Btw ersetzt. in opensaml 2.6.x hatte ich dieses Problem nicht – Gobliins

Antwort

2

Ok, ich denke, ich habe es gefunden, es sieht so aus, als ob Sie keine POM-Implementierungsabhängigkeiten hinzugefügt haben. Wenn ich Ihr POM verwende und diese Abhängigkeit einschließe, erhalte ich das Signaturobjekt.

<dependency> 
    <groupId>org.opensaml</groupId> 
    <artifactId>opensaml-saml-impl</artifactId> 
    <version>3.2.0</version> 
</dependency> 

Die modulare Struktur der Abhängigkeiten unterscheidet sich stark von der Version 2 von OpenSAML.

+0

gearbeitet. Kannst du dir das mal anschauen: https://stackoverflow.com/questions/41116985/opensaml-xmlns-is-not-generated-on-nameidpolicy-and-authncontext – Gobliins

Verwandte Themen