【发布时间】:2017-04-27 16:44:42
【问题描述】:
我遇到了一个问题,即 cxf 没有生成正确的 Soap Security 块以使用 SAML 1.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 没有生成该子元素。我从组织中其他人的遗留代码中发现,他们自己编写了整个安全标头,并且在通过PolicyBasedWSS4JOutInterceptor 之后,我想我可以使用 Aspect 直接在 @987654331 中写出 STR 元素@ 称呼。但这似乎毫无意义,因为该元素是 WS-Security 1.0 规范和 xsd 的一部分,因此推测 wss4j & cxf 应该能够生成它。
我认为这个输出可能是由策略中的某些内容触发的,在浏览了几个 WS-* 规范文档后,我遇到了sp:RequireKeyIdentifierReference 标签,但是将它放在我自己的策略测试版本中 @ 之后987654333@ 元素无效。
我是否遗漏了一些明显的东西?
提前致谢!
【问题讨论】:
标签: java web-services soap cxf wss4j