2017-09-01 2 views
0

Fehler:SAML-Assertion Decryption mit Java-Code

Exception in thread "main" org.opensaml.xml.io.UnmarshallingException: the assertion does not appear to be encrypted 
    at AssertionDecrypter.unmarshallEncryptedAssertion(AssertionDecrypter.java:162) 
    at AssertionDecrypter.decryptAssertion(AssertionDecrypter.java:119) 
    at AssertionDecrypter.<init>(AssertionDecrypter.java:67) 
    at Saml2AssertionEncoding.main(Saml2AssertionEncoding.java:112) 
Caused by: java.lang.ClassCastException: org.opensaml.saml1.core.impl.ResponseImpl cannot be cast to org.opensaml.saml2.core.EncryptedAssertion 
    at AssertionDecrypter.unmarshallEncryptedAssertion(AssertionDecrypter.java:157) 
    ... 3 more 

Mein Java-Code

enter image description here

mein Pom

<dependency> 
     <groupId>org.opensaml</groupId> 
     <artifactId>opensaml-core</artifactId> 
     <version>3.1.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.santuario</groupId> 
     <artifactId>xmlsec</artifactId> 
     <version>2.0.8</version> 
    </dependency> 

    <dependency> 
     <groupId>org.opensaml</groupId> 
     <artifactId>opensaml</artifactId> 
     <version>2.6.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.opensaml</groupId> 
     <artifactId>opensaml-saml-impl</artifactId> 
     <version>3.3.0</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <!-- <groupId>org.opensaml</groupId> <artifactId>xmltooling</artifactId> 
      <version>1.3.1</version> 
     <groupId>org.opensaml</groupId> 
     <artifactId>xmltooling</artifactId> 
     <version>1.4.4</version> --> 
      <groupId>org.opensaml</groupId> 
      <artifactId>xmltooling</artifactId> 
      <version>1.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.jcabi</groupId> 
     <artifactId>jcabi-aspects</artifactId> 
     <version>0.22</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>1.8.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.jcabi</groupId> 
     <artifactId>jcabi-xml</artifactId> 
     <version>0.16.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-nop</artifactId> 
     <version>1.7.5</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.opensaml</groupId> 
     <artifactId>openws</artifactId> 
     <version>1.4.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.opensaml</groupId> 
     <artifactId>opensaml</artifactId> 
     <version>2.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.1.0.RELEASE</version> 
    </dependency> 
</dependencies> 
+0

** verursacht durch: java.lang.ClassCastException: org.opensaml.saml1.core.impl.ResponseImpl kann nicht in org.opensaml.saml2.core.EncryptedAssertion umgewandelt werden ** ist die Ursache. Und bitte nicht Link Code, shre den relevanten Teil in der Frage selbst. – nullpointer

Antwort

0

Es Sie debuggen Verschl scheint benötigen pierte XML-Elemente. Können Sie den Inhalt von document.getDocumentElements() richtig XML überprüfen?

Ich denke, es ist null oder leer. Nachdem Sie die XML-Elemente aus der obigen Funktion erfolgreich erhalten haben, können Sie XML in reinen Text entschlüsseln. Zum Beispiel, diese Seite SAML Assertion Decryption - SAML Decrypt XML Tool - Decrypt SAML Response

0

Ok, scheint zwei Dinge falsch zu sein.

Es sieht so aus, als ob Sie versehentlich versuchen, das Antwortobjekt und nicht die enthaltende Assertion zu entschlüsseln. Sie sollten tun

Response response = unmarshaller.unmarshall(...); 
return (EncryptedAssertion) response.getEncryptedAssertions().get(0) 

Vorausgesetzt, dass Sie wissen, dass nur eine Behauptung in der Antwort gesendet wird.

Es scheint jedoch, als ob Sie eine SAML 1-Antwortnachricht und nicht SAML 2 erhalten. Ich bin kein Experte für SAML 1, aber es scheint, dass verschlüsselte Assertions nicht unterstützt werden.

Sortieren Sie zuerst die Protokollversion mit derjenigen, die die Nachricht sendet, und stellen Sie dann sicher, dass die verschlüsselte Assertion und nicht das Antwortobjekt zurückgegeben wird.

Verwandte Themen