如何使CXF在SOAP Security标头中生成SecurityTokenReference?

时间:2017-04-27 16:44:43

标签: java web-services soap cxf wss4j

我遇到问题,cxf没有为使用SAML 1.1进行身份验证而生成正确的Soap Security块。我已经在这方面工作了几天,而且我对这项技术还很陌生。我很感激任何帮助:

我正在连接到使用SAML 1.1令牌的服务,我可以从身份验证服务成功连接并检索saml令牌。但是,当我进行后续服务调用时,我从服务器收到身份验证错误。我从主机(似乎使用weblogic)获取了一个示例soap请求来与我的cxf输出进行比较,并发现了一个区别:

工作示例有一个wsse:SecurityTokenReference元素作为wsse:Security元素的直接子元素。换句话说,在信封中,路径为:/env:Header/wsse:Security/wsse:SecurityTokenReference

SecurityTokenReference包含KeyIdentifier元素,该元素指向saml的SAMLAssertionID。之后,在dsig:Signature区块中,有一个dsig:Reference URI指向SecurityTokenReference

我应该使用与服务提供商相同的Policy文档,但cxf不生成该子元素。我从组织中的其他遗留代码中发现了他们自己编写整个安全标头,并且经过PolicyBasedWSS4JOutInterceptor之后,我想我可以使用一个Aspect直接写出STR元素。 AssymetricBindingHandler.handleBinding()致电。但这似乎毫无意义,因为该元素是WS-Security 1.0规范和xsd的一部分,所以大概是wss4j& cxf应该能够生成它。

我想可能这个输出会被策略中的某些内容触发,在浏览了几个WS- *规范文档后,我遇到了sp:RequireKeyIdentifierReference标记,但是在我自己的测试版本的策略中放了它sp:WssSAMLV11Token10元素没有效果。

我错过了一些明显的东西吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的CXF?这可能是一个已经修复的错误,所以请尝试使用最新版本。如果仍然无效,请将电子邮件发送到CXF用户邮件列表,包括服务政策,我将会看一下。