2010-11-18 10 views
2

Eine App, an der ich arbeite, arbeitet mit einer vorhandenen Anwendung zusammen, die auf einer Remote-Box ausgeführt wird. Die Kommunikation mit der Remote-App erfolgt über ihre öffentlichen Web-Services. Ich wurde gebeten, eine Erweiterung zu erstellen, bei der ein Client den Web-Service nutzen wird, um mit sensiblen Daten umzugehen, die sicher übertragen werden müssen.So übertragen Sie Daten sicher an/von einem öffentlichen Webdienst

Kann mir jemand Hinweise geben, wie man am besten vorgeht?

+2

Welche Art von SOAP-Web-Service? WCF? Benötigen Sie nur Transportsicherheit oder Authentifizierung? –

+0

@Dirk - Ich glaube es ist ein SOAPy. Ich denke, ich brauche nur Transportsicherheit, die Dienste sind alle öffentlich zugänglich. – 5arx

Antwort

4

Zunächst sollten Sie SSL verwenden und alle Anfragen ablehnen, die sie nicht verwenden. Dadurch werden Daten verschlüsselt, während sie über das Internet übertragen werden.

Wenn Sie SOAP verwenden, können Sie in Ihrem Dienst einen benutzerdefinierten Header definieren, der einen Benutzernamen/ein Kennwort verwendet. Dann validieren Sie für die erste Zeile in jeder öffentlichen Methode den Benutzernamen und das Passwort für eine Datenbank. Wenn dies erfolgreich ist, setzen Sie den HttpContext.Current.User entsprechend, und Ihr Dienst wird sich gut mit der eingebauten Asp.NET-Infrastruktur verbinden.

HINZUGEFÜGT: Unten finden Sie ein Beispiel SoapHeader, das einen Benutzernamen/ein Kennwort für die Authentifizierung enthält.

// define the header 
public class AuthenticationHeader : SoapHeader 
{ 
    public String UserName { get; set; } 
    public String Password { get; set; } 
} 

// your service 
public class PublicWebService : WebService 
{ 
    // defines an instance of the header as part of the service 
    public AuthenticationHeader Authentication; 

    private void Authenticate() 
    { 
     // validate the username/password against a database 
     // set the HttpContext.Current.User if successful. 
     // Maybe throw a SoapException() if authentication fails 
    } 

    // Notice the SoapHeader("Authentication") attribute... 
    // This tells ASP.Net to look for the incoming header for this method... 
    [WebMethod] 
    [SoapHeader("Authentication")] 
    public void PublicMethod1() 
    { 
     Authenticate(); 

     // your code goes here 
    } 

    // Expose another method with the same authentication mechanism 
    [WebMethod] 
    [SoapHeader("Authentication")] 
    public void PublicMethod2() 
    { 
     Authenticate(); 

     // your code goes here 
    } 
} 

Nun, wenn Sie das WSDL-Tool ausführen, wird die generierte Proxy-Klasse umfasst die definierte Authentifizierungsheader:

PublicWebService s = new PublicWebService(); 
s.Authentication = new AuthenticationHeader(); 
s.Authentication.UserName = "xxxxxxxx"; 
s.Authentication.Password = "yyyyyyyy"; 
s.PublicMethod1(); 
s.PublicMethod2(); 
+0

Ich denke, ich werde mit Ihrem Vorschlag gehen re: benutzerdefinierte Header - können Sie einen Link zu ein Walk-Thru bitte? – 5arx

+1

@ 5arx - Ich habe einen Beispielcode für das Hinzufügen eines benutzerdefinierten SOAP-Headers zu Ihrem Dienst hinzugefügt. Lass es mich wissen, wenn du irgendwelche Fragen hast. – dana

-1

DIY Route:

  1. auf Sicherheit Informieren Sie sich (beginnen mit „Secrets and Lies“ und anderen solchen allgemeinen Büchern, bevor ihnen die technischen weitergehen)

  2. Führen Sie eine Risikoanalyse und Faden Beurteilung. Verstehen Sie, was Sie schützen und von wem und wo Bedrohungen herkommen. Es ist unwahrscheinlich, dass Sie "Hohe Sicherheit" benötigen .

  3. Verwenden Sie TLS (aka SSL).

  4. Überprüfen Sie im Client, ob das Zertifikat des Servers korrekt ist.

Bessere Route: beschäftigen ein Experte, der einen guten Ruf hat, Ihnen zu helfen.


Sofern Sie nicht wirklich ein Atomwaffenwerk oder ähnliches bauen.

+0

Sie wissen außer 3. und vielleicht 4. Ihre Antwort war nicht sehr hilfreich. Ich bin ein entwicklungsfähiger Entwickler - ich habe keine Zeit, ein ganzes Buch zu lesen, bevor ich ein relativ kleines Feature einführe ;-) – 5arx

+0

@ 5arx Die Schritte 1 und 2 betreffen die Schritte 3 und 4 (und * warum *) mach sie richtig). In der Fußnote geht es darum, nicht mit übermäßiger Sicherheit über die Spitze zu gehen.Schritt 1 ist der Schlüssel, da es nur unwahrscheinlich ist, dass die Sicherheit der Transportschicht eine hohe Netzsicherheit bietet (das Abfangen von Daten im Transport ist wahrscheinlich keine ernsthafte Bedrohung: Wenn der Server beispielsweise nicht gegen interne Mitarbeiter gesichert ist) Es ist mir nicht gelungen, Daten zu schützen, von denen Ihre Benutzer erwarten, dass sie geschützt sind. * Wenn Sie sich die Mindestanstrengung ansehen, um sicher zu erscheinen, sagen Sie mir bitte Ihren App-Namen, damit ich es vermeiden kann. * – Richard

+0

Ich kann nicht anders, als zu denken, dass Sie den Punkt von Websites wie SO vermissen, die gezielte Ratschläge erhalten sollen über spezifische Fragen von anderen Entwicklern. Ich würde vermuten, dass die meisten von uns hier genug Intelligenz haben, um zu erkennen, dass wir in einer idealen Welt ausgiebig über das Thema lesen sollten oder, besser noch, tausende von Experten auf diesem Gebiet aushändigen sollten. Aber hier in der realen Welt haben wir Kunden schreien über Deadlines und müssen nur Sachen erledigt werden; banale Ratschläge wie 'Lies ein Buch darüber' oder 'Versuche, nach der Antwort zu suchen' werde einfach nicht waschen Ich fürchte mich ;-) – 5arx

Verwandte Themen