2017-08-10 1 views
0

Ich habe eine Java-WSDL in meinem Projekt als Web Reference hinzugefügt. Ich verwende es, um einen Dienst auf einem Endpunkt aufzurufen. Ich habe eine WebMethod in einer ASMX-Datei hinzugefügt und den Dienst dort aufgerufen. Die Anforderung besteht darin, die WSE-Sicherheit zu verwenden und die Anforderung mit dem X509-Zertifikat zu signieren.Entfernen Sie Timestamp von WSSE Security Header C# ASMX/WCF-Dienst

Leider erstellt der Zeitstempel Probleme und ich bekomme die Antwort "Ein Fehler wurde entdeckt, die Kopfzeile zu verarbeiten". Die gleiche Anfrage funktioniert von SoapUI, wenn ich das TimeStamp-Element daraus entferne. This is how the request look like

Hier ist der Code, der die Elemente Sicherheit

//Set WSSE Security 
    svc.RequestSoapContext.Security.Timestamp.TtlInSeconds = 300; 
    svc.RequestSoapContext.Security.MustUnderstand = true; 
    svc.RequestSoapContext.Security.Tokens.Add(newtoken); 
    Microsoft.Web.Services3.Security.MessageSignature signature = new Microsoft.Web.Services3.Security.MessageSignature(newtoken); 
    signature.SignatureOptions = Microsoft.Web.Services3.Security.SignatureOptions.IncludeSoapBody;    
    svc.RequestSoapContext.Security.Elements.Add(signature); 

===============

WCF

Das Problem weiterhin besteht schafft auch wenn ich es mit WCF mache. Sobald ich IncludeTimestamp = false addiere; Die Anfrage wird nicht gesendet, und wenn sie auf "True" gesetzt wird, kann sie eine Anfrage erstellen.

Hier ist die WCF-Code -

 //Create Endpoint 
     EndpointAddress address = new EndpointAddress((istest == true ? CHORUS_UFB_EMMA : CHORUS_UFB_PROD)); 

     //Add Certificate to EndPoint Service 
     X509Certificate2 cert = new X509Certificate2(@"Certificate Path", "Password", X509KeyStorageFlags.PersistKeySet); 

     //Setup custom binding with HTTPS + Body Signing + Soap1.1 
     CustomBinding binding = new CustomBinding(); 

     //HTTPS Transport 
     HttpsTransportBindingElement transport = new HttpsTransportBindingElement(); 

     //Set Security Binding as Transport 
     TransportSecurityBindingElement tsec = SecurityBindingElement.CreateCertificateOverTransportBindingElement(MessageSecurityVersion.WSSecurity10WSTrust13WSSecureConvers‌​ation13WSSecurityPol‌​icy12BasicSecurityPr‌​ofile10); 
     tsec.EnableUnsecuredResponse = true; 
     tsec.AllowInsecureTransport = true; 
     tsec.SecurityHeaderLayout = SecurityHeaderLayout.Lax; 
     tsec.LocalServiceSettings.DetectReplays = false; 
     tsec.LocalClientSettings.DetectReplays = false; 
     tsec.IncludeTimestamp = false; 
     tsec.SetKeyDerivation(false); 
     tsec.EndpointSupportingTokenParameters.Signed.Add(new SecureConversationSecurityTokenParameters()); 

     //Setup for SOAP 11 and UTF8 Encoding 
     TextMessageEncodingBindingElement textMessageEncoding = new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8); 

     //Bind in order (Security layer, message layer, transport layer) 
     binding.Elements.Add(tsec); 
     binding.Elements.Add(textMessageEncoding); 
     binding.Elements.Add(transport); 

Here is the generated request using above code Jede auf diese Hilfe würde geschätzt.

Antwort

0

Dies kann möglicherweise durch Zeitunterschiede zwischen Ihrem Client und dem Webserver verursacht werden, auf dem der von Ihnen angerufene Dienst gehostet wird.

Überprüfen Sie, ob die Zeit auf beiden Servern übereinstimmt und synchron ist. Die Zeiten müssen möglicherweise innerhalb von 5 Minuten Fenster sein.

Verwandte Themen