Die JWT-Spezifikation beschreibt nur die Nutzdaten und wie sie gesendet werden, lässt jedoch das Authentifizierungsprotokoll offen, was die Flexibilität ermöglicht, aber leider kann Flexibilität zu Antimustern und falschem Design führen.
Ich bin auf der Suche nach gut durchdachten und getesteten Unternehmensmustern für die JWT-Authentifizierung, die ich verwenden oder anpassen kann, aber ich habe nichts Vollständiges gefunden.
Was ich dachte ist:
- Wenn kein Autorisierungsheader erfüllt ist oder das JWT-Token ungültig oder abgelaufen ist, senden Sie HTTP 401
- Verwenden Sie zur Authentifizierung den REST-Kanal und melden Sie sich an. Senden Sie den Benutzernamen und das Kennwort als JSON-Objekt
- Um das Token am Leben zu erhalten, verwenden Sie den REST-Kanal / halten Sie ihn aufrecht, rufen Sie ihn alle N (5) Minuten auf, empfangen Sie einen neuen JWT-Token und ersetzen Sie den vorhandenen nach jedem Aufruf (der Token läuft nach M (15) Minuten ab).
Was mich jedoch stört, ist die Notwendigkeit dieses / Keepalive-Kanals. Andererseits zwingt es mich, zu verhindern, dass die Authentifizierung abläuft, selbst wenn der Benutzer nicht anwesend ist (die Entscheidung, ob wir Keepalive wünschen, ist noch nicht erfüllt), und dies sind natürlich zusätzliche Anrufe und zusätzliche Komplikationen für das Protokoll. Interessant wäre, dass der Server das Token automatisch verlängert. In einer sitzungsbasierten Umgebung geschieht dies durch Zurücksetzen des Zeitstempels. Hier müsste der Server jedoch möglicherweise nicht jedes Mal ein neues Token senden, aber sobald das Token in R (z. B. 10) Minuten abläuft. Das Platzieren im Antworttext würde jedoch bedeuten, das JSON-Antwortprotokoll zu ändern (daher ist die Lösung invasiv und nicht transparent), und das Einfügen eines zusätzlichen HTTP-Headers, den der Client verarbeiten könnte, könnte nicht unbedingt ein gutes Muster sein. ICH'
Gibt es fertige Unternehmensmuster, die meine offenen Punkte beantworten? Ist mein Protokollentwurf eine verlässliche Idee? Ich würde lieber etwas Fertiges verwenden als Design von Grund auf neu.