2016-04-07 4 views
0

Ich bin API-Server mit Flask erstellt, wo Benutzer (über die übliche Web-Oberfläche) mit persönlichen API-Schlüssel zur Verfügung gestellt. Und dann müssen alle Anfragen, die an meinen Server gesendet werden, diesen Schlüssel bereitstellen (im Header oder als get/post-Parameter ist das egal). Für den Moment funktioniert der Server über HTTP (nicht HTTPS).Ob die Verwendung eines API-Schlüssels sicher ist?

Aber ich frage mich, ob es sicher ist? Wenn jemand, der wireshark oder irgendeinen anderen Traffic-Sniffer benutzt, diese Adresse bekommt, könnte er Anfragen an meine API als Original-Besitzer senden.

Ich überprüfte Paar von Ressourcen zur Verfügung gestellt API mit apikey Verwendung und festgestellt, dass viele von ihnen HTTP-Schema verwendet. Wenn ich nur HTTPS aktiviere und Clients zwingen würde, HTTPS zu verwenden, würde es ausreichen, meine Anwendung gegen böswillige Personen zu sichern?

Antwort

2

HTTPS sollte ausreichen, um den Datenfluss über das Netzwerk zu sichern.

Wenn Sie weiterhin HTTP unterstützen möchten, können Sie Limiting und Token-Expiry in Ihrer API implementieren.

Durch Beschränkung begrenzen Sie die Anzahl der Anforderungen, die ein API-Benutzer innerhalb eines bestimmten Zeitraums senden kann.

Mit Token-Ablauf läuft der API-Schlüssel des Benutzers nach einiger Zeit ab und sie können ihn nicht mehr verwenden. Das bedeutet, dass Sie die Token-Aktualisierung in Ihren Codes implementieren müssen.

Überprüfen Sie diese PyCon 2014 presentation für bessere API-Implementierungen. Finden Presentation source on GitHub

+0

Token-Ablauf ist ein interessanter Ansatz. Habe ich Recht, dass ich in diesem Fall einen zusätzlichen Endpunkt implementieren muss, zum Beispiel "login" genannt, so muss dieser Endpunkt zuerst mit username/pass und return token auf den vordefinierten Zeitraum aufgerufen werden? In diesem Fall sollte ich darüber nachdenken, wie man Benutzernamen und Passwort über Netzwerk schützt. –

+0

@ AlexG.P. Sie haben recht, das an den Benutzer gesendete Token sollte eine verschlüsselte/serialisierte Zeichenfolge sein, die Benutzerinformationen enthält, die Sie entschlüsseln können, um den Benutzer zu ermitteln. Bitte akzeptieren Sie meine Antwort, wenn es hilft. – Adeola

Verwandte Themen