2015-04-03 6 views
8

Ich bin dabei, die Token-Authentifizierung in meiner API mithilfe von Django Rest Framework zu implementieren. Aber ich bin nicht sicher, ob ich den Grund Token build-in DRF verwenden sollte, oder das JSON Web Token (JWT) verwende Standard in dem DRF docs Der einzige Hinweis, den ich gefunden war (dieses Paket djangorestframework-jwt verwenden):Sollte ich JWT- oder Basic Token-Authentifizierung in Django Rest Framework verwenden?

Im Gegensatz zum integrierten TokenAuthentication-Schema muss die JWT-Authentifizierung keine Datenbank verwenden, um ein Token zu validieren.

Gibt es noch andere Unterschiede, Vor- oder Nachteile?

Hinweis: Die API ist gonna von der Website abgerufen werden (mit AngularJS) und durch eine mobile app

Antwort

10

Wenn auf dem derzeitigen Token Autorisierungsmechanismen suchen, würde ich empfehlen die Verwendung von JWT Token unabhängig von der Plattform. JWT-Tokens enthalten alle Ansprüche innerhalb und können auf dem Client sicher entschlüsselt werden. Dies bedeutet, dass Sie nicht nur ein undurchsichtiges Token erhalten, das dem Client keine Informationen liefert, sondern auch Ansprüche im Token speichern und auf dem Client dekodieren können, um Ihre Schnittstelle zu erstellen. JWT-Token sind zustandslos, so dass Sie die Serverseite nicht speichern oder verfolgen müssen, was von Vorteil ist, wenn Sie auf mehrere Server skalieren. Sie sind auch sicher, da Sie die Seite des privaten Signaturschlüssels speichern, mit der Sie sicher sein können, dass alle Anrufe, die in Ihre API eingehen, ein gültiges Token verwenden, das von Ihrer Autorisierungs-API ausgegeben wurde.

JWT-Token spielen sehr gut mit Angular-Clients. Da es sich um JSON handelt, können Sie sie in Ihrem Angular-Client entschlüsseln und sogar die Client-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) .

Abgesehen davon verhält sich ein JWT-Token immer noch wie jedes Bearer-Token (von auth api ausgegeben, vom Client gespeichert, an Ressourcen-API im Autorisierungsheader übergeben), so dass es wirklich keine Nachteile gibt, es zu benutzen kann sich vorstellen.

Zusammenfassend, Sie haben weniger hin und her zwischen Client und Server sowie weniger Arbeit, wenn Sie skalieren, wenn Sie JWT-Token implementieren.

2

JWT:

  1. Any Client, der es für Sachen (ähnlich Geld beim Kauf von Material) kann sich fragen, hat
  2. Keine Datenbank-Lookup einmal ausgegeben - eingebettet Ablauf diktiert Validierung

JWT hat ein Ablaufdatum und bis zu diesem Zeitpunkt bleibt es gültig. Dies kann unerwünscht sein, wenn Sie sich beim Zurücksetzen eines Kennworts oder bei Erzwingen eines Benutzers abmelden müssen.

Eine Token-Blacklist kann verwendet werden, um die oben genannten 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.

Mit Caching und anderen Leistungsverbesserungen im Auge, braucht man nicht über den Overhead zu kümmern, aber die Bequemlichkeit und die Zukunftssicherheit der Strömung.

die volle Kontrolle über die Authentifizierung, Autorisierung und Entwertung ist eine gute Sache zu haben, egal ob JWT + schwarze Liste oder Basic Token Auth verwendet wird.

Daher may die Grund Auth-Token besser, wenn die Strömung angepasst wird, um die Bedürfnisse zu adressieren.

Verwandte Themen