Ich erstelle eine Webanwendung und einen RESTful-Webdienst.
Ich habe verschiedene Artikel darüber gelesen, wie die Anfragen an den Webdienst am besten authentifiziert werden können.
Die beste Option für mich scheint die Verwendung der HTTP-Basisauthentifizierung zu sein. Nahezu jeder Artikel, den ich gelesen habe, besagt, dass die Authentifizierung über SSL oder ein gleichwertiges Dokument verschlüsselt werden sollte.
Ich bin mir nicht ganz sicher, worum es geht. Bedeutet dies, dass sich mein gesamter Webdienst auf einem sicheren Server befinden muss? Wird dies die Dinge verlangsamen?
web-services
rest
authentication
ssl
https
Gaz_Edge
quelle
quelle
Antworten:
Versuchen Sie zunächst zu verstehen, wie die SSL- (HTTPS) und HTTP-Authentifizierung funktioniert.
Die üblichen HTTP-Authentifizierungsmethoden (Digest, Basic und alle Formulare + Cookie-basierten Authentifizierungsschemata, die Sie zusätzlich zu HTTP implementieren können) sind für sich genommen unsicher, da sie Authentifizierungsinformationen mehr oder weniger im Klartext senden. Ob sich die Daten in POST-Feldern oder -Headern befinden und ob die Base64-Codierung angewendet wird, spielt in dieser Hinsicht keine Rolle. Das Kennwort ist für jeden, der Zugriff auf den Netzwerkverkehr hat, klar sichtbar. Dies bedeutet, dass die HTTP-Authentifizierung über einen nicht vertrauenswürdigen Kanal wertlos ist: Ein Angreifer benötigt nur ein wenig Netzwerk-Sniffing, um Ihr Kennwort zu lesen.
SSL implementiert einen sicheren Kommunikationskanal über einen inhärent unsicheren Kanal. Dies funktioniert ungefähr wie folgt:
Beachten Sie hier einige wichtige Punkte:
Es ist also offensichtlich ein gewisser Overhead erforderlich, aber es ist nicht so schlimm, wie Sie denken würden - es liegt hauptsächlich in der Größenordnung, in der "mehr Hardware darauf werfen" die angemessene Antwort ist, es sei denn, Sie bereiten sich auf absolut massiven Datenverkehr vor ( denke an Google oder Facebook). Unter normalen Umständen, dh bei der typischen Verwendung von Webanwendungen, ist der SSL-Overhead vernachlässigbar. Sobald Sie also vertrauliche Daten haben, ist es am besten, alles über SSL auszuführen, einschließlich Ressourcen. SSL ist auch die einzige praktikable Möglichkeit, den HTTP-Verkehr zu sichern. andere Methoden sind einfach nicht so standardisiert und werden daher nicht allgemein unterstützt, und Sie möchten diese Dinge absolut nicht selbst implementieren, da es ehrlich gesagt einfach zu einfach ist, sie falsch zu verstehen.
TL; DR: Ja, SSL + Basisauthentifizierung ist eine gute Idee. Ja, Sie benötigen einen sicheren Server (und ein gültiges Zertifikat ). Ja, dies verlangsamt die Arbeit ein wenig, aber nein, das ist kein Grund zur Sorge jetzt.
quelle
HTTPS (SSL) ist keine Benutzerauthentifizierung. Es bietet lediglich eine Verschlüsselung zwischen zwei Endpunkten.
Aber ja, es gibt ein winziges bisschen Overhead (obwohl nicht genug, um eine Änderung der Pläne / Hardware zu rechtfertigen). Siehe hier :
/programming/548029/how-much-overhead-does-ssl-impose
quelle
Bei der HTTP-Basisauthentifizierung werden der vom Benutzer angegebene Benutzername und das Kennwort bei jeder Anforderung an den Server gesendet. Dies bedeutet, dass sie auch in Bereichen Ihrer Website im Klartext vorliegen, die nicht unbedingt sicher sein müssen. Natürlich möchten Sie, dass SSL hier Ihre Benutzer schützt.
Theoretisch könnten Sie die Cookie-Authentifizierung verwenden und nur SSL auf der Anmeldeseite einfügen (wo der Benutzername und das Passwort gesendet werden). Wenn Ihre Cookies anständig sicher und sicher gegen Wiederholungsangriffe sind, kann ein Angreifer nichts damit anfangen, selbst wenn er es geschafft hat, einen zu erhalten.
quelle
Bei der Standardauthentifizierung werden im Header der http-Anforderung ein Benutzername und ein Kennwort festgelegt. Wenn Sie kein SSL oder ein gleichwertiges Produkt verwenden, werden dieser Benutzername und dieses Kennwort im Klartext gesendet und sind für jeden trivial, um sie zu stehlen.
Die meisten Webserver unterstützen heutzutage sofort HTTPS, und obwohl dies den Aufwand für jeden Anruf erhöht, ist dieser Aufwand minimal.
Sie können einige Endpunkte sichern und andere nicht (dh einen authentifizierten Endpunkt, der ein Token erzeugt, das für andere Anrufe verwendet werden kann). Ich würde SSL für den gesamten Dienst wärmstens empfehlen, da es viel sicherer ist. (Wenn nichts anderes verhindert wird, dass vertrauliche Daten abgefangen werden)
quelle
Jeff Atwood hat vor nicht allzu langer Zeit einen kurzen Blogpost darüber geschrieben, ob eine vollständige Verschlüsselung der richtige Weg ist. Er beschreibt einige Beispiele aus der Praxis und hat auch einige Zeilen zu Leistungsaspekten.
Außerdem verweist er auf diesen Artikel über eine Google Mail-Fallstudie und zitiert Folgendes:
Er erwähnt auch einige der jüngsten Verbesserungen beim clientseitigen Zwischenspeichern von Seiten über HTTPS durch den Browser .
Trotzdem gibt es andere Strafen, von denen die meisten nicht die Leistung, sondern die Implementierungskosten sind:
quelle
Die HTTP-Basisauthentifizierung ohne eigene Sitzungsbehandlung lässt Sie wahrscheinlich für Cross-Site-Anforderungsfälschungsangriffe offen. Sie können es wahrscheinlich verwenden, wenn Sie mit Ihrer eigenen Sitzungsbehandlung koppeln, aber Sie haben möglicherweise Probleme, eine saubere Abmeldefunktion bereitzustellen.
Unabhängig davon, was Sie für die Authentifizierung verwenden, müssen Sie HTTPS zum Verschlüsseln der Verbindung verwenden (es sei denn, auf die Webanwendung wird nur in einem kontrollierten, sicheren Netzwerk zugegriffen). Es kann die Dinge etwas verlangsamen (Verbindungsaufbau ist teuer, aber Browser neigen dazu, Verbindungen für eine Weile aufrechtzuerhalten), aber wenn Sie eine sichere Anwendung wünschen, können Sie sie sowieso nicht vermeiden, sodass Sie sie nicht wirklich benötigen sich darüber Sorgen machen.
Hinweis: "HTTPS-Authentifizierung" (die Sie im Titel erwähnt haben) ist irreführend. Sie kann sich auf die Authentifizierung von SSL-Clientzertifikaten beziehen, die wenig mit dem Text Ihrer Frage zu tun hat und ihre eigenen Vorteile und Probleme hat. Das wollen Sie wahrscheinlich nicht anfassen.
quelle
Wie werden Sie die Basisauthentifizierung durchführen?
Wenn es sich um einen fest codierten Benutzernamen / ein fest codiertes Kennwort handelt und Sie die integrierte Funktionalität Ihres Webservers verwenden, um dies zu tun, hat dies wahrscheinlich keine Auswirkungen. Wenn Sie verrückte Dinge in einer Datenbank oder ähnlichem tun, kann dies Auswirkungen haben.
Wie andere hier bemerkt haben, werden SSL und das Senden der zusätzlichen Header die Dinge technisch langsamer machen, aber es wird in keiner Weise von Bedeutung sein.
quelle