Geeignete Auswahl der Authentifizierungsklasse für die Python-REST-API, die von der Web-App verwendet wird

7

Ich möchte eine REST-API mit dem Django-REST-Framework erstellen. Anfangs wäre der Client eine Web-Anwendung, aber zukünftige Clients könnten mobile Anwendungen beinhalten.

Leider finde ich die Liste der Authentifizierungsklassen, die in der Dokumentation aufgeführt sind verwirrend. Es sieht so aus, als würde TokenAuthentication meine Bedürfnisse erfüllen. Ich würde eher den kognitiven Overhead von OAuth vermeiden, es sei denn, es gibt einen zwingenden Sicherheitsgrund, um diesen Weg zu gehen.

Dies ist eine Entscheidung, die ich in diesem sehr frühen Stadium treffen möchte. Kann jemand einen Rat geben?

Bearbeiten: Obwohl hoffentlich nicht relevant, dachte ich, ich würde Neo4j als Back-End für die Anwendung verwenden, keine herkömmliche SQL-Datenbank.

    
David 20.12.2014, 09:12
quelle

1 Antwort

26

Django REST Framework gibt Ihnen die Flexibilität, mehrere Authentifizierungsmethoden zu verwenden. Da ich etwas Zeit habe und zukünftigen Besuchern, die ähnliche Fragen haben, nützlich sein wird, werde ich die Vorteile der gebräuchlichsten Authentifizierungsmethoden erläutern.

  

Zunächst wäre der Client eine Webanwendung, aber möglicherweise könnten zukünftige Clients mobile Anwendungen enthalten.

Wenn Sie mit Webanwendungen arbeiten, die sich in derselben Domäne und Django-Instanz wie die API befinden, verwenden die meisten Benutzer SessionAuthentication , wenn sie mit den vorhandenen Authentifizierungsmethoden mit dem Server interagieren. Die Authentifizierung funktioniert nahtlos, sodass Sie den zweiten Authentifizierungsschritt nicht durchlaufen müssen.

Die meisten APIs unterstützen auch irgendeine Form von BasicAuthentication , am wahrscheinlichsten, weil es am einfachsten zu testen ist, aber auch, weil es am einfachsten zu implementieren ist. Für Ihre Webanwendung ist dies nicht die empfohlene Authentifizierungsmethode, aber für Ihre mobile Anwendung ist es nicht ungewöhnlich, dass sie verwendet wird. Ich persönlich würde eine tokenbasierte Authentifizierung empfehlen, sodass Sie sich keine Sorgen darüber machen müssen, dass Clients die Anmeldeinformationen des Benutzers abfangen.

  

Es sieht so aus, als würde TokenAuthentication meine Bedürfnisse erfüllen.

Viele Leute benutzen TokenAuthentication , weil es relativ einfach zu verstehen und zu benutzen ist, und es scheint zuerst alle Bedürfnisse zu erfüllen. Token werden direkt an Benutzer angehängt und rotieren nicht automatisch ( obwohl Sie sie automatisch rotieren lassen können ), also jeder Client Arbeiten im Auftrag des Benutzers erhält das gleiche Token. Dies kann ein Problem sein, wenn Sie das Token jemals widerrufen müssen, da auch alle anderen Clients ihr Token ungültig machen.

  

Ich würde eher den kognitiven Overhead von OAuth vermeiden, es sei denn, es gibt einen zwingenden Sicherheitsgrund, um so zu gehen.

OAuth 2 ( OAuth2Authentication ) gibt Token-Rotation und Token-Ablauf zusätzlich zu den Vorteilen von TokenAuthentication . Es gibt auch den Vorteil, einzelne Tokens zu sperren, ohne andere Clients zu beeinträchtigen, die sich für den Benutzer authentifizieren. Sie können Clients auch mithilfe von Bereichen auf einzelne Bereiche Ihrer API beschränken, was nützlich ist, wenn Sie bestimmte Bereiche der API häufiger verwenden als andere.

Ich werde auch JSON Web Tokens , denn während ich es nicht benutzt habe, ist es in den Support-Kanälen ziemlich weit aufgetaucht. Es funktioniert sehr ähnlich wie TokenAuthentication beim Abrufen von Tokens, aber es hat den zusätzlichen Vorteil von eindeutigen Tokens für Clients und Token-Ablauf.

    
Kevin Brown 20.12.2014 16:45
quelle