我遇到了一个问题,cxf没有为使用SAML1.1进行身份验证生成适当的Soap安全块。我已经在这上面工作了几天了,而且我对这项技术还是个新手。如果能帮上忙我会很感激:
我正在连接一个使用SAML1.1令牌的服务,并且我可以成功地连接并从身份验证服务检索SAML令牌。但是,当我进行后续的服务调用时,会收到来自服务器的身份验证错误。我从主机(似乎正在使用weblogic)获得一个示例soap请求,将其与我的cxf输出进行比较,发现了一个差异:
工作示例中有一个wsse:SecurityTokenReference元素作为wsse:Security元素的直接子元素。换句话说,在信封中的路径是:/env:Header/wsse:Security/wsse:SecurityTokenReference。
该SecurityTokenReference包含一个指向KeyIdentifier的SAMLAssertionID的元素。稍后,在dsig:Signature块中,有一个指向SecurityTokenReference的dsig:Reference URI。
我假设使用与服务提供者相同的Policy文档,但cxf没有生成该子元素。我从组织中其他人的遗留代码中发现,他们习惯于自己编写整个安全标头,在查看完PolicyBasedWSS4JOutInterceptor之后,我想我可以使用一个方面直接在AssymetricBindingHandler.handleBinding()调用中写出STR元素。但这似乎没有意义,因为该元素是WS-Security1.0规范和xsd的一部分,因此wss4j & cxf应该能够生成它。
我认为这个输出可能是由策略中的某些东西触发的,在浏览了几个WS-*规范文档之后,我发现了sp:RequireKeyIdentifierReference标记,但是在sp:WssSAMLV11Token10元素之后将其放入我自己的策略测试版本中没有任何效果。
我是不是漏掉了什么明显的东西?
提前感谢!
发布于 2017-04-29 00:36:36
您使用的是什么版本的CXF?这可能是一个已修复的错误,因此请尝试使用最新版本。如果这仍然不起作用,请向CXF用户邮件列表发送一封电子邮件,其中包括服务的策略,我将查看一下。
https://stackoverflow.com/questions/43663577
复制相似问题