我遇到了CXF的问题,没有生成适当的肥皂安全块,用于使用SAML 1.1进行身份验证。我已经为此工作了几天,而且我对这项技术很陌生。我感谢任何帮助:
我要连接到使用SAML 1.1令牌的服务,我可以成功地连接和检索身份验证服务的SAML令牌。但是,当我进行后续服务调用时,我会从服务器中遇到身份验证错误。我从主机(似乎正在使用WebLogic(中获得了一个示例肥皂请求与我的CXF输出进行比较,并找到了区别:
工作示例具有wsse:SecurityTokenReference
元素作为wsse:Security
元素的直接子。换句话说,在信封中,路径为: /env:Header/wsse:Security/wsse:SecurityTokenReference
。
SecurityTokenReference
包含一个指向SAML SAMLAssertionID
的KeyIdentifier
元素。后来,在dsig:Signature
块中,有一个dsig:Reference URI
指向SecurityTokenReference
。
我据说我使用的是与服务提供商相同的策略文档,但是CXF并未产生该子元素。我从组织中的其他旧代码中找到了他们本身编写整个安全标头的内容,并且经过PolicyBasedWSS4JOutInterceptor
,我认为我可以使用方面直接在AssymetricBindingHandler.handleBinding()
调用中写出STR元素。但这似乎是毫无意义的,因为该元素是WS-Security 1.0 Spec和XSD的一部分,因此大概是WSS4J&CXF应该能够生成它。
我以为可能会在策略中的某些内容触发此输出,并且经过了几个WS-*规格文档后,我遇到了sp:RequireKeyIdentifierReference
标签,但是将其放置在我自己的测试版本中,在sp:WssSAMLV11Token10
元素已有之后无效。
我错过了明显的东西吗?
预先感谢!
您正在使用什么版本的CXF?这可能是已修复的错误,因此请尝试使用最新版本。如果仍然不起作用,请将电子邮件发送到CXF用户邮件列表,包括服务的策略,我会看看。