Sollte ich die JWT- oder Basic Token-Authentifizierung in Django Rest Framework verwenden?

9

Ich bin dabei, die Token-Authentifizierung in meiner API mithilfe von Django Rest Framework zu implementieren. Aber ich bin mir nicht sicher, ob ich das integrierte Token-Build-in-DRF verwenden oder den JSON-Web-Token-Standard (JWT) verwenden soll (mit diesem Paket djangorestframework-jwt ) Die einzige Referenz, die ich gefunden habe, war in den DRF-Dokumenten:

  

Im Gegensatz zum integrierten TokenAuthentication-Schema, JWT Authentication   Es muss keine Datenbank zum Validieren eines Tokens verwendet werden.

Gibt es noch andere Unterschiede, Vorteile oder Nachteile?

Hinweis: Der Zugriff auf die API erfolgt über die Website (mit angularjs) und über eine mobile App

    
EdgarT 03.04.2015, 21:35
quelle

2 Antworten

11

Die Verwendung von JWT-Tokens hat unabhängig von der Plattform viele Vorteile. JWT-Token base64 kodieren alle Benutzeransprüche in ihrem Körper und können auf dem Client sicher zu einem statusbehafteten Objekt dekodiert werden. Dies ist im Vergleich zu alternativen opaken Tokens, die der Client-App keinen Nutzen bieten, von großem Vorteil. Bei der Anmeldung haben Sie sofort atomare Daten im Client ohne zusätzliche Roundtrips zur API, um nach Benutzerinformationen zu suchen.

JWT-Tokens sind zustandslos: Es ist nicht notwendig, die Serverseite zu speichern oder zu verfolgen, die horizontal auf vielen Servern skalierbar ist. Sie sind sicher, da der private Signaturschlüssel, der verwendet wurde, serverseitig gespeichert ist. Eingehende API-Aufrufe, die sie enthalten, werden einfach mit dem privaten Schlüssel validiert, um sicherzustellen, dass sie von Ihrer Autorisierungs-API ausgegeben wurden.

JWT-Token funktionieren gut in Angular, React und jedem anderen Client-Framework. Da es sich um JSON handelt, können Sie base64 im Client decodieren und Client-UI-Elemente direkt an Ihre Ansprüche binden - jemand mit einem Admin-Anspruch kann ein Admin-Menü sehen und ein Benutzer ohne diesen Anspruch wird nie wissen, ob das Menü existiert richtig.

Abgesehen davon verhält sich ein JWT-Token immer noch wie jedes Bearer-Token:

  • Ausgestellt von der Autorisierungs-API
  • Gespeichert vom Client in Cookies oder lokalem Speicher
  • An die Ressourcen-API in Authorization header
  • übergeben

Zusammenfassend haben Sie weniger N + 1-Fahrten zwischen Ihrem Client und Server und weniger Aufwand für die Skalierung, wenn Sie JWT-Token implementieren.

    
cchamberlain 03.04.2015, 21:58
quelle
2

JWT:

  1. Any client, der es hat, kann nach Sachen fragen (ähnlich wie Geld beim Kauf von Sachen)
  2. Keine Datenbanksuche nach Ausgabe - der eingebettete Ablauf diktiert die Validierung

JWT hat ein Ablaufdatum und bis zu diesem Zeitpunkt bleibt es gültig. Dies kann unerwünscht sein, wenn Sie einen Benutzer beim Zurücksetzen des Kennworts abmelden oder erzwingen müssen.

Eine Token-Blacklist kann verwendet werden, um die obigen Probleme zu beheben. Dadurch wird das permanente oder In-Memory-Tracking wieder eingeführt, das JWT ursprünglich vermeiden wollte. Das Tracking wird jedoch NUR auf ausgewählten Schlüsseln ausgeführt, während die Verfolgung des Basis-Tokens für alle Benutzer gilt.

JWT kann von jedem entschlüsselt werden, der es hat. Daher muss man auf die im Token gepackten Informationen achten. Das Basic Auth Token hingegen ist nur ein einfacher Hash, der nur als Referenz auf einen Benutzer angesehen werden kann.

Beim Caching und anderen Leistungsverbesserungen müssen Sie sich keine Gedanken über den Overhead machen, sondern müssen sich um den Komfort und die Zukunftssicherheit des Datenflusses kümmern.

Die volle Kontrolle über Authentifizierung, Autorisierung und Ungültigmachung zu haben, ist eine gute Sache, egal ob JWT + Blacklist oder Basic Token Auth verwendet wird.

Daher ist das Basic Auth Token may besser, wenn der Ablauf an die Bedürfnisse angepasst wird.

    
un33k 07.12.2016 16:53
quelle

Tags und Links