webentwicklung-frage-antwort-db.com.de

Wie sichere ich RESTful-Webdienste?

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

Optionen:

TLS (HTTPS) +

Gibt es mehr mögliche Optionen zu prüfen? Wenn OAuth dann welche Version? Ist es überhaupt wichtig? Nach dem, was ich bisher gelesen habe OAuth 2. mit Inhaber-Token (das heißt ohne Unterschriften) scheint zu sein - nsicher .

Ich habe einen weiteren sehr interessanten Artikel über REST-basierte Authentifizierung gefunden.

Sichern Sie Ihre REST API ... den richtigen Weg

88
Jan Deinhard

Es gibt noch eine andere, sehr sichere Methode. Es sind Client-Zertifikate. Wissen Sie, wie Server ein SSL-Zertifikat anzeigen, wenn Sie sie über https kontaktieren? Nun, Server können ein Zertifikat von einem Client anfordern, damit sie wissen, dass der Client der ist, von dem sie sagen, dass er ist. Kunden generieren Zertifikate und geben sie über einen sicheren Kanal an Sie weiter (wie wenn Sie mit einem USB-Schlüssel in Ihr Büro kommen - am besten mit einem nicht trojanisierten USB-Schlüssel).

Sie laden die öffentlicher Schlüssel des Zertifikats Client-Zertifikate (und ggf. deren Unterzeichnerzertifikate) in Ihren Webserver ein, und der Webserver akzeptiert keine Verbindungen von Personen außer den Personen, die über die entsprechenden privaten Schlüssel für die Zertifikate verfügen weiß über. Es wird auf der HTTPS-Ebene ausgeführt, sodass Sie möglicherweise sogar die Authentifizierung auf Anwendungsebene wie OAuth (abhängig von Ihren Anforderungen) vollständig überspringen können. Sie können eine Ebene abstrahieren und eine lokale Zertifizierungsstelle erstellen und unterzeichnen Sie Zertifizierungsanforderungen von Clients, sodass Sie die Schritte "Lassen Sie sie ins Büro kommen" und "Laden von Zertifikaten auf den Server" überspringen können.

Schmerzen im Nacken? 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). Es wird normalerweise verwendet, wenn Sie einen Dienst an Kunden verkaufen, anstatt jemanden registrieren und eine Verbindung herstellen zu lassen.

Wie auch immer, es ist möglicherweise nicht die Lösung, die Sie suchen (es ist wahrscheinlich nicht ehrlich), aber es ist eine andere Option.

58
Tom Ritter

HTTP Basic + HTTPS ist eine gängige Methode.

18
pc1oad1etter

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 kümmert sich um den Schutz vor Wiederholungsangriffen, sodass das Inhaber-Token auch nicht gegen Wiederholungen geschützt werden muss.

Wenn jemand Ihr Inhaber-Token abfängt, kann er sich zwar als Sie ausgeben, wenn er die API aufruft, aber es gibt viele Möglichkeiten, dieses Risiko zu mindern. Wenn Sie Ihren Token einen langen Ablaufzeitraum einräumen 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 Ablaufzeitraum einräumen. und raten Kunden, Token nicht zu behalten.

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 einfach zu beschaffen, für Kunden einfach 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.

9
dthorpe