Django REST framework - SimpleJWT - silend refresh

Django, Flask, Bottle, WSGI, CGI…
Antworten
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Hi,

ich spiele gerade mit SimpleJWT ( für Django REST framework) herum und frage mich, ob oder wie es möglich ist einen silend refresh des access tokens durchzuführen oder wie das standardmäßig gehandhabt wird.

Angenommen:

Szenario1:
Die lifetime vom access token ist ja default auf 5 Minuten gesetzt. Jetzt sind 6 Minuten rum und der Client schickt ein GET. Die Antwort vom Resourcenserver: "Ne, dein Token mag ist abgelaufen".
Das heißt ich validiere diese Antwort und erkenne, dass ich das refresh token auf den refresh Endpunkt posten muss, damit ich ein neues access token bekomme. Ok, gut.
Nun kann ich meinen initialen GET ausführen. In Summe habe ich 3 requests verbraucht.

Szenario 2:
Viel schlauer wäre es doch, wenn bei Lifetime=4:50 Minuten des access tokens die App selbständig das access token erneuert und somit der initiale GET schon durchgeht. Damit verbrauche ich 2 requests.

Fragen:
Gibt es da ein best practise oder nimmt man auch die 3 requests in Kauf (oder ist das totaler Quatsch)?
Gibt es eine Implenetierung in SimpleJWT für den silend refresh?
Andere Erfahrungen, Tipps und Tricks?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Best Practice ist es JWT nicht zu benutzen es sei den du hast da einen wirklich sehr guten Grund für. Man kann da einfach zu viel falsch machen und in der Regel braucht man es auch nicht.

Du musst bedenken dass jeder Request auch schief gehen kann. Daraus ergeben sich ein paar Konsequenzen die du Bedenken solltest:
  • Geht Szenario 2 schief, fällst du in Szenario 1. Du kannst dich also nicht zwischen diesen beiden Szenarien entscheiden.
  • Der JWT muss lang genug valid sein, dass wenn ein refresh mal schief geht aufgrund von temporären Problemen, du nicht mit invaliden Tokens da stehst. Es muss also lang genug valid sein dass Zeit für ein paar Versuche da ist.
  • Die Konsequenz ist dass du den JWT regelmäßig refreshen solltest, nicht erst kurz bevor er invalid wird.
  • Wenn ein paar Versuche schief gehen und da offensichtlich ein Problem ist was manuelle Intervention erfordert, möchtest du einen Alarm haben, Zeit haben auf den zu reagieren und das Problem zu reparieren. In der Zeit wäre es praktisch wenn die Tokens nicht invalid werden.
5min sind also auch viel zu kurz. Ich denke 1h oder auch mehr kann hier sinnvoll sein allerdings muss man sich das individuell anschauen und mit potentiellen Kosten bei einem Incident, erwarteter Reaktionszeit und MTTR (Mean Time To Repair) auf der einen Seite und dem Sicherheitsrisiko und allem was damit verbunden ist auf der anderen Seite auseinandersetzen und dann dazwischen abwägen.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Danke für die Hinweise.

Was ist denn Deiner Meinung nach best practise für API Auth?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten