Java 如何使CXF在SOAP安全标头中生成SecurityTokenReference?

Java 如何使CXF在SOAP安全标头中生成SecurityTokenReference?,java,web-services,soap,cxf,wss4j,Java,Web Services,Soap,Cxf,Wss4j,我遇到了一个问题,cxf没有生成正确的Soap安全块来使用SAML1.1进行身份验证。我已经在这方面工作了几天,而且我对这项技术相当陌生。我非常感谢您的帮助: 我正在连接到一个使用SAML 1.1令牌的服务,我可以成功地连接并从身份验证服务检索SAML令牌。但是,当我进行后续服务调用时,服务器会出现身份验证错误。我从主机(似乎正在使用weblogic)获得了一个示例soap请求,以与我的cxf输出进行比较,并发现了一个差异: 工作示例中有一个wsse:SecurityTokenReference

我遇到了一个问题,cxf没有生成正确的Soap安全块来使用SAML1.1进行身份验证。我已经在这方面工作了几天,而且我对这项技术相当陌生。我非常感谢您的帮助:

我正在连接到一个使用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

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

我认为这个输出可能是由策略中的某些内容触发的,在浏览了几个WS-*规范文档之后,我发现了
sp:RequireKeyIdentifierReference
标记,但将它放在我自己的策略测试版本中
sp:wsssamlv11 token10
元素之后没有效果

我错过了什么明显的东西吗


提前谢谢

您使用的是什么版本的CXF?这可能是一个已修复的错误,因此请尝试使用最新版本。如果仍然不起作用,请向CXF用户邮件列表发送一封电子邮件,其中包括服务的策略,我会看一看。

您好,我们使用的是3.1.7版,因此它是相当新的,我在较新的发行说明中没有看到任何与此相关的内容。谢谢你的回复,我会给用户组发送一些东西。