Wie sichere ich RESTful-Webdienste?


88

Ich muss sichere RESTful-Webdienste implementieren . Ich habe bereits mit Google recherchiert, stecke aber fest.

Optionen:

TLS (HTTPS) +

Gibt es weitere mögliche Optionen? Wenn OAuth dann welche Version? Ist es überhaupt wichtig? Nach dem, was ich bisher gelesen habe, scheint OAuth 2.0 mit Inhaber-Token (dh ohne Signaturen) unsicher zu sein .

Ich habe einen weiteren sehr interessanten Artikel zur REST-basierten Authentifizierung gefunden .

Sichern Sie Ihre REST-API ... auf die richtige Weise

Antworten:


59

Es gibt noch eine andere, sehr sichere Methode. Es sind Client-Zertifikate. Wissen Sie, wie Server ein SSL-Zertifikat präsentieren, wenn Sie sie über https kontaktieren? Nun, Server können ein Zertifikat von einem Client anfordern, damit sie wissen, dass der Client der ist, für den sie sich ausgeben. Kunden generieren Zertifikate und geben diese über einen sicheren Kanal an Sie weiter (z. B. wenn Sie mit einem USB-Stick in Ihr Büro kommen - vorzugsweise mit einem USB-Stick ohne Trojaner).

Sie laden den öffentlichen Schlüssel der Zertifikatsclientzertifikate (und gegebenenfalls die Zertifikate ihrer Unterzeichner) in Ihren Webserver, und der Webserver akzeptiert keine Verbindungen von anderen Personen als den Personen, die über die entsprechenden privaten Schlüssel für die Zertifikate verfügen es weiß über. Es wird auf der HTTPS-Ebene ausgeführt, sodass Sie möglicherweise sogar die Authentifizierung auf Anwendungsebene wie OAuth (je nach Ihren Anforderungen) vollständig überspringen können. Sie können eine Ebene entfernt abstrahieren, eine lokale Zertifizierungsstelle erstellen und Zertifizierungsanforderungen von Clients signieren. Auf diese Weise können Sie die Schritte "Sie ins Büro bringen" und "Zertifikate auf den Server laden" überspringen.

Nackenschmerzen? Absolut. Gut für alles? Nee. Sehr sicher? Jep.

Es hängt jedoch davon ab, dass Kunden ihre Zertifikate sicher aufbewahren (sie können ihre privaten Schlüssel nicht online veröffentlichen), und es wird normalerweise verwendet, wenn Sie einen Dienst an Kunden verkaufen, anstatt sich registrieren und eine Verbindung herstellen zu lassen.

Auf jeden Fall ist es möglicherweise nicht die Lösung, nach der Sie suchen (wahrscheinlich nicht, um ehrlich zu sein), aber es ist eine andere Option.


Okay, jetzt bin ich verwirrt, welches besser ist, dieser Ansatz oder eine andere Antwort . Könnten Sie näher darauf eingehen? : D
fikr4n

Ihre Antwort wäre perfekt für Meister, aber für Anfänger verwirrend. Können Sie bitte einige detaillierte Informationen oder Links zum Lesen bereitstellen?
Rajan Rawal

Wenn die Zertifikate selbstsigniert sind, ist sie dann immer noch "sehr sicher"?
Joyce

@Joyce würde ich nicht denken. Da Ihnen nicht vertraut wird (keine Straftat), kann den von Ihnen unterzeichneten Zertifikaten (mit Ihrem eigenen Zertifikat) nicht vertraut werden. Ich glaube, dass selbstsignierte Zertifikate zum Testen nützlicher sind.
mbmast

Wenn der Endbenutzer (Kunde) ein Client-Zertifikat hat, dessen öffentlicher Schlüssel mit dem Server geteilt wird, fällt dann nicht die ganze "sehr sichere" Sache auseinander, wenn der Computer des Kunden gehackt und sein Client-Zertifikat gestohlen wird?
mbmast

18

HTTP Basic + HTTPS ist eine gängige Methode.


3
Ich glaube nicht, dass http Digest Ihnen etwas über http basic gibt, wenn beide über https sind.
PC1oad1etter

3
Sie können gerne hilfreiche Informationen über die Vorteile von HTTP Digest ohne Ton hinzufügen.
pc1oad1etter

9

Wenn Sie zwischen OAuth-Versionen wählen, wählen Sie OAuth 2.0.

OAuth-Inhaber-Token sollten nur mit einem sicheren Transport verwendet werden.

OAuth-Inhaber-Token sind nur so sicher oder unsicher wie der Transport, der die Konversation verschlüsselt. HTTPS schützt vor Wiederholungsangriffen, sodass der Inhaber-Token nicht auch vor Wiederholungen schützen muss.

Es ist zwar richtig, dass jemand, der Ihr Inhaber-Token abfängt, sich beim Aufrufen der API als Sie ausgeben kann, aber es gibt viele Möglichkeiten, dieses Risiko zu verringern. Wenn Sie Ihren Token einen langen Ablaufzeitraum geben und von Ihren Kunden erwarten, dass sie die Token lokal speichern, besteht ein höheres Risiko, dass Token abgefangen und missbraucht werden, als wenn Sie Ihren Token einen kurzen Ablaufzeitpunkt geben. Kunden müssen für jede Sitzung neue Token erwerben. und raten Sie Kunden, Token nicht beizubehalten.

Wenn Sie Nutzdaten sichern müssen, die mehrere Teilnehmer passieren, benötigen Sie mehr als HTTPS / SSL, da HTTPS / SSL nur einen Link des Diagramms verschlüsselt. Dies ist kein Fehler von OAuth.

Inhaber-Token sind für Kunden leicht zu beschaffen, für Kunden leicht für API-Aufrufe zu verwenden und werden häufig (mit HTTPS) verwendet, um öffentlich zugängliche APIs von Google, Facebook und vielen anderen Diensten zu sichern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.