【问题标题】:How to Generate both X509Data and KeyValue within KeyInfo Element with WSS4J如何使用 WSS4J 在 KeyInfo 元素中生成 X509Data 和 KeyValue
【发布时间】:2017-12-01 21:10:07
【问题描述】:

我需要生成 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>

我正在使用带有 SAMLCallback 的 Wss4jOutInterceptor 和 CXF 来生成断言。我可以让它生成 X509Data 或 KeyValue 但不能同时生成。这必须在 SubjectConfirmationData 以及断言的签名中。我已经看到一些答案,您使用 OpenSAML 执行此操作并手动构建它,但我希望使用 WSS4J 有一种更简单的方法。

提前致谢

【问题讨论】:

    标签: soap cxf saml opensaml wss4j


    【解决方案1】:

    您可以通过在 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 进行连接可能需要一些努力。

    【讨论】:

    • 感谢您的回复。我在主题的 KeyInfoBean 上尝试了 setElement,但似乎 X509 或 KeyValue 在 WSS4JOutInterceptor 处理的某个地方丢失了。我开始认为此时使用“原始”Opensaml 和自定义 CXF 拦截器可能会更简单。您知道该方法的任何好的链接或示例吗?再次感谢您的帮助
    猜你喜欢
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多