2016-07-25 7 views
1

So habe ich ein sehr ähnliches Problem mit diesem Beitrag hier. SOAP KeyInfo valuesHinzufügen von KeyInfo-Referenz in SOAP-Anfrage

Ich möchte eine Referenz in KeyInfo hinzufügen, aber ich kann nicht scheinen, einen Weg zu finden, um es durch Code zu tun. Hier

ist, was die erwartete Ausgabe sein sollte:

<KeyInfo> 
    <wsse:SecurityTokenReference> 
     <wsse:Reference URI="#SecurityTest" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/> 
    </wsse:SecurityTokenReference> 
</KeyInfo> 

Und ich habe dies tun oben, wo sie versucht, von verweisen:

<wsse:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" 
     EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" 
     xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
     wsu:Id="SecurityTest">Base64CertStuffBlahblah 
</wsse:BinarySecurityToken> 

Jeder Versuch, den Teil nur KeyInfo Schaffung erlaubt Ich füge einen Gegenstand ein, wie einen Schlüssel, um diesen Teil zu füllen, aber ich möchte nur eine Referenz. Mit diesem Code arbeite ich, aber ich erstelle gerade nicht das, was ich will.

//This creates a X509 clause but it's as far as I've got. 
//The "keyInfoData" needs to be of a different type to allow custom reference? 
var signer = new SignedXmlWithId(doc) {SigningKey = Key}; 
KeyInfo keyInfo = new KeyInfo(); 
KeyInfoX509Data keyInfoData = new KeyInfoX509Data(); 
keyInfoData.AddCertificate(cert); 
keyInfo.AddClause(keyInfoData); 
signer.KeyInfo = keyInfo; 

Vielen Dank für die Suche, jede Hilfe wäre willkommen.

Antwort

2

Also dieses Stück Code lässt mich hinzufügen, was ich in den KeyInfo-Teil möchte.

KeyInfo keyInfo = new KeyInfo(); 
XmlElement x = doc.CreateElement("wsse","SecurityTokenReference", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); 
XmlElement y = doc.CreateElement("wsse","Reference", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); 
y.SetAttribute("URI","#SecurityTest"); 
y.SetAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"); 
x.AppendChild(y); 
var keyInfoData = new KeyInfoNode(x); 
keyInfo.AddClause(keyInfoData); 
signer.KeyInfo = keyInfo; 

Dies ergibt folgendes Ergebnis:

<KeyInfo> 
    <wsse:SecurityTokenReference> 
     <wsse:Reference URI="#SecurityTest" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" /> 
    </wsse:SecurityTokenReference> 
</KeyInfo> 

Dies scheint nicht mein Problem zu beheben, obwohl jetzt die SOAP „schaut“ richtig. Vielleicht hilft es jemand anderem.