2016-07-25 4 views
1

그래서이 게시물과 매우 비슷한 문제가 있습니다. SOAP KeyInfo valuesSOAP 요청에 KeyInfo 참조 추가

KeyInfo 내에서 참조를 추가하고 싶지만 코드를 통해이를 수행 할 방법을 찾지 못하는 것 같습니다. 여기

는 예상 출력이 있어야 할 것입니다 :

<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> 

그리고 나는 그것을에서 참조하려고된다 이상이이 수행

<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> 

의 KeyInfo 부분을 만들기에 모든 시도는 할 수 있습니다 이 부분을 채우기 위해 키와 같은 항목을 삽입하겠습니다. 그러나 나는 단지 참조만을 원합니다. 이 코드는 내가 지금까지 작업 해 왔지만 지금 원하는 것을 생성하지 않습니다.

//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; 

감사합니다. 도움을 주시면 감사하겠습니다.

답변

2

그래서이 코드를 사용하여 원하는 부분을 KeyInfo 부분에 추가 할 수 있습니다.

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; 

이것은 다음과 같은 결과를 생성합니다

<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> 

이것은 SOAP 지금 올바른 "보이는"하지만 내 문제를 해결하기 위해 보이지 않았다. 아마 다른 사람을 도울 것입니다.

관련 문제