2009-07-28 3 views
2

Ich habe in der Vergangenheit ASP.NET-Webdienste erstellt, die entweder öffentlich genutzt wurden oder die Windows-Authentifizierung verwendet haben. Ich muss jetzt einen Webdienst erstellen, der das SOAP 1.1-Protokoll verwendet, und es muss mit einem Benutzernamen und einem Kennwort vom Aufrufer gesichert werden.ASP.NET-Webdienstsicherheit

Es scheint setting up the infrastructure für WCP ist Overkill für ein oder zwei Web Services. Irgendwelche anderen Vorschläge? Ich habe auch daran gedacht, ASP.NET 4.0 Beta zu verwenden. Wenn jemand das für dieses Szenario untersucht hat, wäre es hilfreich, Ihre Meinung zu erfahren.

Vielen Dank im Voraus für Ihre Vorschläge.

Antwort

6

Der einfache Weg ist, einen speziellen Header zu erstellen, die für jeden Anruf die Authentifizierungsinformationen tragen und authentifizieren/autorisiert die Benutzer, den Weg

Hier ist ein Beispielcode: http://aspalliance.com/805_Soap_Headers_Authentication_in_Web_Services

Beachten Sie, dass Sie auf diese Weise senden klaren Benutzernamen und Passwort, so dass Sie SSL verwenden oder eine Art Digest-Authentifizierung verwenden möchten

+0

Wenn der konsumierende Client eine Bibliothek verwendet, wie z. B. PHP SOAP, können sie problemlos über die Bibliothek in den Header schreiben? – Josh

+0

Ich habe es nicht in PHP getan, aber ich denke, solange die Bibliothek benutzerdefinierte Header unterstützt, sollte es kein Problem geben – Jaime

+0

Ich tat dies in .NET 4.0 und es gab 2 Syntaxfehler 1) Es sollte ein Leerzeichen sein zwischen newlocalhost: localhost.AuthSoapHd objAuthSoapHeader = newlocalhost.AuthSoapHd(); 2) Der Aufruf der Webmethode erforderte, dass der SpAuthenticationHeader als Parameter übergeben wurde – Ronald

0

Es gibt verschiedene Möglichkeiten, dies zu tun. Man könnte den Zugriff auf bestimmte Gruppen von IPs ermöglichen. Wenn die IP-Adresse nicht mit einer der Listen übereinstimmt, können Sie den Anruf auf Methodenebene einfach ablehnen.

Andernfalls könnten Sie eine andere Methode erstellen, die ein Token zurückgeben würde und dann alle relevanten Methoden, um dieses Token im Gegenzug zu erwarten, um die Anfrage zu verarbeiten.

0

Verwenden Sie SSL. Erzwinge jedem, der deinen Webservice nutzt, die Verwendung von https.

 //Check for Secure Channel: HTTPS 
     if (!Context.Request.IsSecureConnection) 
      return "The HTTP Connection must use Secure Sockets (HTTPS)";