我有点像WSS4J的Noob所以我希望我错过了一些简单的东西。我正在尝试使用WSS4j和CXF为出站SOAP消息创建Security头。根据要求,必须签署断言和时间戳。断言在SAMLCallback和带有WSS4JOutInterceptor属性的Timestamp中完成。所有这一切都是直截了当的。该挂钩不是在签名中嵌入时间戳签名的KeyInfo信息,而是需要引用断言,其中包含KeyInfo的签名。因此,时间戳的KeyInfo的签名应如下所示:
<ds:KeyInfo>
<wsse:SecurityTokenReference TokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0">
<wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLID">3a4edd62-458e-4c3f-adc0-a9b505cb6284</wsse:KeyIdentifier>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
注意KeyIdentifier如何指向和ID,这是断言的ID。我已经为WSS4JOutInterceptor尝试了所有不同的WSHandlerConstants.SIG_KEY_ID选项,但是所有这些选项都使用证书中的信息填充KeyInfo元素。我希望在WSS4J框架中有一些直接的解决方案。否则我正在编写一个拦截器来破解SOAP头。
提前致谢。
答案 0 :(得分:0)
是的,可以,这是我向CXF推送的测试,以展示如何做到这一点:
https://github.com/apache/cxf/commit/5504cad08be5f2eb8396410618da68cb732b80e0