如何使用 WSS4J 在 KeyInfo 元素中生成 X509Data 和 KeyValue
How to Generate both X509Data and KeyValue within KeyInfo Element with WSS4J
我需要生成 SAML 断言的 KeyInfo 元素,该断言同时具有带有 X509 证书的 X509Data 元素和带有 public 密钥的 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 以及断言的签名中。我已经看到一些答案,您可以使用 OpenSAML 并手动构建它,但我希望有一种使用 WSS4J 的更简单的方法。
提前致谢
您可以通过在 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 连接它可能需要一些努力。
我需要生成 SAML 断言的 KeyInfo 元素,该断言同时具有带有 X509 证书的 X509Data 元素和带有 public 密钥的 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 以及断言的签名中。我已经看到一些答案,您可以使用 OpenSAML 并手动构建它,但我希望有一种使用 WSS4J 的更简单的方法。
提前致谢
您可以通过在 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 连接它可能需要一些努力。