Token-basierte Authentifizierung mit Flasch-Sicherheitserweiterung

8

Ich bin derzeit auf der Suche nach einer Möglichkeit, eine REST-API mithilfe der tokenbasierten Authentifizierung zu sichern. Ich entwickle die API in Python mit Flask und habe die flask-Sicherheitserweiterung entdeckt, die viele interessante Funktionen zu haben scheint.

Eine der in der Dokumentation erwähnten Funktionen ist die Token-Authentifizierung.

Gemäß der Dokumentation:

  

Token-basierte Authentifizierung wird durch Abrufen der Benutzerberechtigung aktiviert   Token durch Ausführen eines HTTP POST mit den Authentifizierungsdetails als   JSON-Daten gegen den Authentifizierungsendpunkt. Ein erfolgreicher Anruf an   Dieser Endpunkt gibt die Benutzer-ID und ihre Authentifizierung zurück   Zeichen. Dieses Token kann in nachfolgenden Anforderungen für protected verwendet werden   Ressourcen.

Ich bin jedoch immer noch etwas verwirrt darüber, wie man dieses Feature mit Hilfe von flask-security implementiert. Einige Online-Recherchen haben mich dazu gebracht, Dinge wie @auth_token_required zu verwenden, aber ich habe Probleme, alles zusammen zu stellen. Die Flasch-Sicherheitsdokumentation selbst ist nicht sehr hilfreich.

Wie kann ein Benutzer beispielsweise ein Authentifizierungstoken erhalten? Was sind die Authentifizierungsendpunkte?

Es wäre großartig, wenn Sie mich in die richtige Richtung führen könnten. Code Beispiele wären auch toll: -)

    
user2483431 08.12.2014, 11:22
quelle

3 Antworten

6

Endpunkt ist / login, Sie senden Ihre Anmeldeinformationen als json-Anfragetext:

%Vor%

Damit dies jedoch funktioniert, müssen Sie die csrf-Tokens in Ihrer flask-App deaktivieren (danke Mandar Vaze):

%Vor%

Dann führen Sie jede Anfrage mit dem Token in den HTTP-Headern durch:

%Vor%

Oder als Abfragezeichenfolge:

%Vor%

Client-Beispiel in Python 3:

%Vor%

Eckiges Beispiel-Snippet, um das Token zu erhalten:

%Vor%

Eckiges Beispiel-Snippet, um geschützte Seiten zu besuchen:

%Vor%     
Sebastian 27.03.2015 15:12
quelle
5

Ich fand Flask-Security Token-basierte kein guter Kandidat für mein Projekt. Ich empfehle stattdessen, JWT-Token zu verwenden.

Die Probleme mit der tokenbasierten Authentifizierung von Flask-Security.

  1. Sie müssen CSRF global deaktivieren, das ist nicht gut, wenn Sie auch eine traditionelle Webanwendung haben, in der ein CSRF-Token wünschenswert ist
  2. Keine einfache Möglichkeit, das Token zu erneuern (ohne erneutes Senden des Passworts)
  3. Die Nutzlast des Tokens kann nicht kontrolliert werden, es gibt keine API zum Abrufen / Abrufen von Daten vom / zum Token
  4. Dieses Token funktioniert nur mit einer Flask-App. Also, wenn Ihre Frontend-App mit mehreren erholsamen Apis sprechen muss, funktioniert das nicht gut

Schauen Sie sich JWT ( pyjwt oder an flask-jwt ) Token, es löst alle oben genannten Probleme und mehr.

    
David Lin 21.07.2016 00:15
quelle
2

Der Authentifizierungsendpunkt ist / login

Sehen Sie sich den Code von flash-security hier genauer an. views.py: _render_json ()

login () ruft _render_json auf, welches wiederum get_auth_token () aufruft - und das Authentifizierungs-Token zurückgibt.

Problem (für mich) ist es, dies zur Arbeit zu bringen. Für mich scheint request.json leer (daher funktioniert nicht )

%Vor%

Hoffentlich hilft es Ihnen, sich ein wenig vorwärts zu bewegen.

    
Mandar Vaze 13.01.2015 10:49
quelle