2009-05-06 15 views
13

Ich habe einen einfachen .NET Webservice geschrieben, der auf einem anderen Server gehostet wird. Ich weiß es nicht wirklich. Jetzt hatte ich nur seine URL und ich versuchte Webrequest und Webresponse-Methode zu verwenden, um auf diesen Webdienst über HTTP POST zuzugreifen. Nun möchte ich wissen, ob es irgendeinen Weg gibt, den Webservice-Zugang zu sichern, so dass niemand es ausnutzen kann?Wie sichere ich einen Webservice in .net?

zum Beispiel:

http://example.com/Verify/Verification.asmx/Verify?AccountNumber=3223&ProductName=876

Nun, dies sind alle Parameter erforderlich, um diese Webservice aufzurufen. Als ob jetzt jemand es ausnutzen könnte. Wie kann ich es also sichern? Obwohl ich vorhabe, SSL zu erhalten, und dieses ganze Ding geschieht von Server zu Server, nicht von Klient zu Bediener?

+0

DANK ALLE JEDER .. HAPPY CODING. – Mohit

Antwort

9

Sie können einen Serviceschlüssel (ähnlich wie Amazon WS) im Autorisierungsheader der Webanfrage übergeben, der mit einem Algorithmus Ihrer Wahl verschlüsselt werden könnte, der dann am Serviceende entschlüsselt wird und nur mit der Ausführung if fortfährt der Schlüssel paßt

Siehe Abschnitt 14.8 in der folgenden URL

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

+0

Danke, es macht Sinn. Gibt es noch etwas, das ich tun könnte, um es sicherer zu machen?Wenn die Anforderung vom Client im SSL-Modus erfolgt, wird diese Anforderung auch in SSL von Server zu Server ausgeführt, oder muss ich sie speziell aktivieren? Entschuldige, dass ich so viele Fragen gestellt habe. Danke. – Mohit

+1

Ich glaube, dass Sie auch ein SSL-Zertifikat für die Server-zu-Server-Kommunikation benötigen. Das gepaart mit einem verschlüsselten Autorisierungs-Header sollte alles sein, was Sie brauchen –

1

Leider haben Sie nicht viele Optionen, da Sie die alte ASMX Web-Service-Technologie verwendet haben. Die einzige Möglichkeit, jemanden mit ASMX-Webdiensten über das Internet zu authentifizieren, ist im Grunde genommen "do it yourself".

Wenn ich dies tun müsste, würde ich WCF verwenden und mir einige Optionen geben. Wenn ich WCF nicht verwenden könnte, würde ich einen benutzerdefinierten HTTP-Header erstellen, um den Benutzernamen und das Passwort (über SSL!) Zu übergeben und sie auf dem Server zu authentifizieren. Alternativ würde ich Zertifikate auf dem Client verwenden und verlangen, dass sie an den Server gesendet werden. IIS kann sogar Client-Zertifikate in Windows-Identitäten auf dem Server umwandeln.

+0

WCF ... Ich denke, ich kann einen Blick darauf werfen. Aber ich muss immer noch nur via URL darauf zugreifen, das ist meine Einschränkung. Bitte hilf mir, wenn du kannst. Jeder Link wäre ausreichend. danke. – Mohit

+0

Das WCF Developer Center auf MSDN befindet sich unter http://msdn.microsoft.com/WCF/. WCF sollte anstelle von ASMX für alle neuen Webservice-Entwicklungen verwendet werden. –

1

In der Regel, was Sie verwendet haben, um .NET-Webdienste vor WCF zu sichern, war Microsofts Web Service Extensions (WSE), jetzt Version 3.0. Ich habe es erfolgreich in einem handelsüblichen Produkt verwendet, und es ist ziemlich gut, da es auf den W3C ws * Standards basiert. Es ist möglich, mit denen von .NET-Clients (offensichtlich), aber auch von Java-Clients erfolgreich zu interoperieren, wenn Sie Apache Axis verwenden. Download unter:

http://www.microsoft.com/downloads/details.aspx?FamilyID=018a09fd-3a74-43c5-8ec1-8d789091255d&displaylang=en

+0

Ich empfehle dringend gegen sogar _dinking_ über WSE! WSE ist ziemlich veraltet und wurde durch WCF ersetzt. Verwenden Sie WSE nur, wenn Sie keine andere Wahl haben. –

+3

Deshalb habe ich/before/WCF geschrieben ... Die ursprüngliche Frage scheint sich auf traditionelle .NET-Webdienste zu beziehen. Natürlich würde ich WCF auch empfehlen, wenn es eine Wahlmöglichkeit gibt. –

+0

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _} Deshalb habe ich es so formuliert - "nur wenn du keine andere Wahl hast". Ich möchte nicht, dass jemand es benutzt, weil "es .ASMX-Dateien verwendet" oder "WCF ist zu weit fortgeschritten" oder ähnliches. WSE ist obsolet und sollte einfach nicht verwendet werden, zumindest nicht bei einem wichtigen Projekt. –

0

Wir haben eine ganze Reihe von Web-Services zu tun und sie zu sichern wir haben soeben einen Benutzernamen und Passwort auf unsere Anfrage Objekt. In Ihrem Fall könnten Sie einfach zwei neue Parameter für einen Benutzernamen und ein Passwort hinzufügen, oder einfach nur einen hinzufügen und so etwas wie einen Authentifizierungscode verwenden, den Sie so komplex oder so einfach wie Sie möchten.

Einige Ideen sind etwas einfaches wie eine Liste von GUIDs, die akzeptable Schlüssel für eine Verschlüsselung der IP-Adresse der anfordernden Server sind, so dass der Authentifizierungscode nur mit der vom Webdienst verifizierten IP-Adresse funktioniert.

+0

Sehr schön .. Danke für den Vorschlag .. Aber wie andere Leute sagten, ich werde versuchen, mit WCF auch und sehen, ob es mir nützt. Ansonsten kann ich immer Ihren Vorschlag verwenden. Vielen Dank. – Mohit

0

Sie können auch ein Token erstellen und dieses Tokenid als Parameter an jede Webmethode übergeben. Sie können das Token in der Hashtabelle pflegen und aus der Hashtabelle entfernen, sobald die Sitzung abgebrochen wurde.

Das Token muss bei erfolgreicher Anmeldung generiert werden. Um eine Token-ID zu generieren, empfehle ich die Verwendung von RNGCryptoServiceProvider.

+0

Sie haben gesagt: Sie können auch ein Token erstellen und dieses Tokenid als Parameter an jede Webmethode übergeben. wenn ich Ihrer Führungslinie folge, um Token mit jeder Anfrage zu übertrage, dann, wie konnte ich verhindern, anbringen zu befestigen. Angreifer greifen auch diese Token und senden die Anfrage. führe mich. Vielen Dank – Mou

Verwandte Themen