Wie kann ich das Passwort automatisch an den REST-Service senden?

Ich bin mit Flask-Restful , um einen REST-Service zu bauen. Das iOS-Gerät wird dann mit diesem REST-Backend verbunden, um die lokalen Daten zu synchronisieren.

Der Service wird über eine https- Verbindung abgerufen.

  • Erhalten Sie einfach einen letzten Wert aus der Steckdose
  • Verschachtelte Validierung mit dem flaschenreinen RequestParser
  • Der REST-Service ist staatenlos und der Benutzer muss sich bei jeder Anfrage authentifizieren. Daher werden der Benutzername und das Passwort in klarem Format an den REST-Service gesendet. Das Backend hat das Passwort und überprüft das bestehende Hash-Passwort in der Datenbank.

    api.add_resource(Records, '/rest/records/<string:email>/<string:password>/<string:ios_sync_timestamp>') 

    Jetzt ein Problem, das ich mit diesem Ansatz sehe, ist, dass der Benutzername und das Passwort im klaren Format als Teil der GET URL sind. Das Serverprotokoll wird das offensichtlich verfolgen. Nun, wenn mein Backend jemals gehackt wurde, würden die Log-Dateien alle Benutzernamen und Passwörter kompromittieren.

    Was ist die beste Lösung dafür? Ich dachte, vielleicht senden Sie Benutzernamen und Passwort als POST-Argumente, aber wie kann ich das mit GET-Anfragen dann?

     class Records(Resource): def get(self, email, password, ios_sync_timestamp): pass def post(self, email, password, ios_sync_timestamp): pass 

  • Wie kann ich einen SOCKS 4/5 Proxy mit urllib2 verwenden?
  • Python ssh Client über Socken (Proxy)
  • Python urllib2 mit Tor Proxy wirft `HTTP Error 403` aus
  • Allgemeiner SOCKS-Server-Fehler beim Umschalten der Identität mit dem Stamm
  • Wie man python Anfragen Arbeit über Socken Proxy
  • Emulieren von SSHs SOCKS Proxy Tunnel in Python
  • 2 Solutions collect form web for “Wie kann ich das Passwort automatisch an den REST-Service senden?”

    Zur Authentifizierung jeder Anforderung mit einem Benutzernamen und Passwort wie Sie möchten, sollten Sie verwenden: Basic Authentication .

    Um es zu benutzen, ist es ziemlich einfach und es funktioniert mit allen HTTP Methoden (GET, POST, …). Sie müssen nur einen HTTP-Header in die Anfrage hinzufügen:

     Authorization: Basic <...> 

    Der <...> Teil ist der username:password das in base64 kodiert ist.

    Zum Beispiel, wenn Ihr Login ist foo und Ihr Passwort ist bar . Der HTTP-Header sollte diese Zeile haben:

     `Authorization: Basic Zm9vOmJhcg==` 

    Durch deine HTTPS- Verbindung ist es sicher.

    EDIT: Mit Flask können Sie Flask HTTP auth verwenden , um diese "automatisch" zu erreichen.

    Eine andere Lösung statt der Basic Auth in jedem Aufruf, wie von Sandro Munda vorgeschlagen, ist es, einen API Key mit einem POST zu generieren, um zuerst die Anmeldeinformationen zu überprüfen und dann in den Anforderungsheaders zu übergeben. Dann können Sie es in jedem API-Handler für eine streng-körnige Überprüfung oder anwendungsweit mit einem @before_request Handler @before_request .

    Arbeitsablauf

    • Client sendet einen POST an den Server mit den Anmeldeinformationen (Benutzername / Pass)
    • Server antwortet mit einem API Key. Wie ein hexdigest von etwas Geheimnis

    von jetzt an

    • Jedes Mal, wenn der Client eine API-Anfrage senden muss, fügt er einen Header hinzu (wir nennen ihn X-API-Key mit dem API Key.
    Python ist die beste Programmiersprache der Welt.