Saml Assertion解密使用java代码

时间:2017-09-01 04:54:06

标签: java maven encryption saml-2.0

错误:

intent.putExtra("tasks", tasks);

我的Java代码

enter image description here

我的Pom

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

2 个答案:

答案 0 :(得分:0)

您似乎需要调试加密的XML元素。你能检查document.getDocumentElements()的内容是否正确?

我猜它是空的还是空的。从上面的函数成功获取原始XML元素后,您可以将XML解密为纯文本。例如,此网站SAML Assertion Decryption - SAML Decrypt XML Tool - Decrypt SAML Response

答案 1 :(得分:0)

好吧,似乎有两件事是错的。

看起来你不小心试图解密响应对象而不是包含断言。你应该做

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

前提是您知道响应中只发送了一个断言。

但是,您似乎收到了SAML 1响应消息,而不是SAML 2。 我不是SAML 1的专家,但似乎不支持encryptet断言。

首先将protocoll版本与发送消息的版本一起排序,然后确保返回加密的断言而不是响应对象。