【问题标题】:Java XML WS-Security Signature; X.509 Token Profile; adding a Security Token ReferenceJava XML WS-安全签名; X.509 令牌配置文件;添加安全令牌参考
【发布时间】:2016-11-29 12:58:11
【问题描述】:

下面是我需要用 Java 生成的 XML Signature keyinfo。

<ds:KeyInfo Id="idhere">
<wsse:SecurityTokenReference wsse11:TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1" wsu:Id="idhere" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd">
<wsse:Reference URI="#X509" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1"/>
                    </wsse:SecurityTokenReference>
                </ds:KeyInfo>

以下是到目前为止我在 Java 方面的进展情况。如何将安全令牌引用添加到密钥信息?

KeyInfoFactory kif = fac.getKeyInfoFactory(); 

KeyInfo ki = kif.newKeyInfo(Collections.singletonList(Whatgoeshere?));  


XMLSignature signature = fac.newXMLSignature(si, ki,null,"id-2FC89B275743456788xtdcfyvg9014",null);

任何需要的额外信息随时询问。谢谢!

【问题讨论】:

  • 你有没有想过这个问题?

标签: java xml ws-security wss4j


【解决方案1】:

我今天一直在为此苦苦挣扎,但找到了解决方案。为了生成安全令牌参考,我使用了除javax.xml.crypto 之外的另一个库,即org.apache.ws.security。想法是使用所需的keyinfo 生成安全令牌引用,然后使用keyinfofactory 创建keyinfo 对象。

查看示例:

   import org.apache.ws.security.message.token.DOMX509Data;
   import org.apache.ws.security.message.token.DOMX509IssuerSerial;
   import org.apache.ws.security.message.token.SecurityTokenReference;

   import javax.xml.crypto.XMLStructure;
   import javax.xml.crypto.dom.DOMStructure;
   import javax.xml.crypto.dsig.keyinfo.*;

   SecurityTokenReference secRef = new SecurityTokenReference(doc);
               secRef.addWSSENamespace();

   String issuer = "issuer information";
   BigInteger serialNumber = new BigInteger("issuer serial number");
   DOMX509IssuerSerial domIssuerSerial = new DOMX509IssuerSerial(doc, issuer, serialNumber);
   DOMX509Data domX509Data = new DOMX509Data(doc, domIssuerSerial);
   secRef.setX509Data(domX509Data);

   XMLStructure structure = new DOMStructure(secRef.getElement());
   KeyInfo keyInfo = keyInfoFac.newKeyInfo(java.util.Collections.singletonList(structure), "key-info");

这将生成如下密钥信息:

<ds:KeyInfo Id="key-info">
    <wsse:SecurityTokenReference>
        <ds:X509Data>
            <ds:X509IssuerSerial>
                <ds:X509IssuerName>issuer information</ds:X509IssuerName>
                <ds:X509SerialNumber>issuer serial number</ds:X509SerialNumber>
            </ds:X509IssuerSerial>
        </ds:X509Data>
    </wsse:SecurityTokenReference>
</ds:KeyInfo>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2015-08-17
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多