我遇到问题,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
元素没有效果。
我错过了一些明显的东西吗?
提前致谢!
答案 0 :(得分:0)
您使用的是哪个版本的CXF?这可能是一个已经修复的错误,所以请尝试使用最新版本。如果仍然无效,请将电子邮件发送到CXF用户邮件列表,包括服务政策,我将会看一下。