我在我的应用程序中为sso使用spring security saml扩展。我能够成功地与adfs集成。现在我需要从adfs获得的确切编码的SAML响应,以传递给下游的webservices。如何获取SAML响应字符串?
答案 0 :(得分:2)
如果您的SAML令牌已加密:
您可以扩展默认 SAMLAuthenticationProvider 并覆盖authenticate方法。在此方法中,您可以按如下方式获得完整的SAML响应:
SAMLAuthenticationToken token = (SAMLAuthenticationToken) authentication;
SAMLMessageContext context = token.getCredentials();
try {
String assertion = XMLHelper.nodeToString(SAMLUtil.marshallMessage(context.getInboundMessage()));
System.out.println(assertion);
} catch (MessageEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
如果您的SAML令牌未加密,则可以使用:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
SAMLCredential credential = (SAMLCredential) authentication.getCredentials();
Assertion assertion = credential.getAuthenticationAssertion().getParent();
答案 1 :(得分:1)
参见manual中的第9.5章,它讨论了如何使用releaseDOM
标志将Assertion保持为原始格式以及如何提取它(与Agam写入的方式相同)。