我是一名试图在Java中为WebSSO实现服务提供商插件的大学生。我正在使用Shibboleth IdP作为身份提供者。我已经能够将身份验证请求发送到IdP,并且已成功通过servlet从IdP接收到响应。我尝试解码响应并能够获取XMLObject。现在的问题是响应已加密。所以当我使用
Assertion assertion = response.getAssertions().get(0);
它基本上返回null。但是当我使用
Assertion assertion = response.getEncryptedAssertions().get(0);
不为空。因此,它基本上意味着响应是加密的。现在,我不知道如何解密SAMLReponse的流程。欢迎任何指针,代码或建议。
最佳答案
您可以使用类似的东西(用您的yourCredential
对象替换Credential
):
StaticKeyInfoCredentialResolver keyresolver =
new StaticKeyInfoCredentialResolver(yourCredential);
Decrypter samlDecrypter = new Decrypter(null, keyresolver, new InlineEncryptedKeyResolver());
Assertion assertion = samlDecrypter.decrypt(response.getEncryptedAssertions().get(0));
如果您的情况更为复杂,则可以在shibboleth的Wiki上找到更详细的示例:Link