我是一名试图在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

09-25 16:48