如何使用WSS4J在KeyInfo元素中生成X509Data和KeyValue

时间:2017-12-01 21:10:08

标签: soap cxf saml opensaml wss4j

我需要生成SAML断言的KeyInfo元素,该断言具有带X509证书的X509Data元素和带有公钥的KeyValue元素。它应该是这样的:

                        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                            <ds:X509Data>
                                <ds:X509Certificate>MIIGLTCquvS ... </ds:X509Certificate>
                            </ds:X509Data>
                            <ds:KeyValue>
                                <ds:RSAKeyValue>
                                    <ds:Modulus>vOksZtPkaxkdxN ..... </ds:Modulus>
                                    <ds:Exponent>AQAB</ds:Exponent>
                                </ds:RSAKeyValue>
                            </ds:KeyValue>
                        </ds:KeyInfo>

我使用Wss4jOutInterceptor和CXF与SAMLCallback生成断言。我可以让它生成X509Data或KeyValue,但不能同时生成两者。这必须同时包含在SubjectConfirmationData和Assertion的签名中。我已经看到了一些使用OpenSAML进行此操作的答案,并且手动构建了所有这些答案,但我希望使用WSS4J的方法更简单。

先谢谢

1 个答案:

答案 0 :(得分:0)

您可以通过在KeyInfoBean.setElement()上设置DOM元素来添加自定义KeyInfo元素。目前还没有办法对Signature KeyInfos做同样的事情。我在当前的代码库中解决了这个问题:

https://issues.apache.org/jira/browse/WSS-619

这是包含测试的提交:

http://svn.apache.org/viewvc?view=revision&revision=1817084

虽然可能需要一些努力才能通过CXF的WSS4JOutInterceptor进行连接。