2016-02-19 4 views
10

Ich habe zuvor eine lange Frage bezüglich der Sicherheit von JWT-Tokens gestellt, aber ich möchte mich hier speziell auf den JWT-Token-Widerruf konzentrieren. Ich verwende JWT als primären Authentifizierungsmechanismus für die Authentifizierung mobiler Clients einer mobilen Anwendung. Meine Frage ist: Lohnt es sich Token-Widerruf zu implementieren? Momentan verwende ich eine kurze Lebensdauer für meine Tokens und vertraue darauf, dass TLS verhindert, dass Tokens von nicht autorisierten Benutzern gestohlen werden. Ich habe den Token-Widerruf nicht implementiert. Aber im Grunde bedeutet dies, dass, wenn ein Token irgendwie gestohlen wird, es keinen Weg gibt, ihn zu widerrufen. Was mich mehr beschäftigt, ist, dass wenn ein Benutzer sich von der Anwendung abmeldet, das letzte Token, das er benutzt hat, immer noch funktioniert, wenn ich es nicht widerrufen kann. Und es bedeutet auch, dass ich die Anzahl der Token, die ein Benutzer anfordern kann, nicht begrenzen kann, da ich keine Token verfolge, die ausgegeben werden. Ich habe viele Anwendungen gesehen, die einfach alle ausgegebenen Token in der Datenbank speichern, so dass sie Token widerrufen und regulieren können. Aber das scheint nur den Zweck der Verwendung von JWT zu besiegen. Lohnt es sich, solche Komplexität hinzuzufügen oder ist mein derzeitiges System sicher?Ist JWT Token Revocation es wert?

Vielen Dank im Voraus. Ich schätze jede Hilfe.

Antwort

3

Ob es sich lohnt, ist für jeden hier schwer zu beurteilen. Es hängt davon ab, was Sie schützen und welche Risiken Sie zu mindern versuchen.

Sie können reference tokens verwenden, wenn Sie es für notwendig erachten, die Tokens zu widerrufen. Es zwingt die Dienste, die diese Tokens verbrauchen, mit dem Autorisierungsserver zu kommunizieren, was die Skalierbarkeit verschlechtert und einen einzigen Fehlerpunkt einführt.

Es werden Initiativen entwickelt, um Token-Diebstahl zu verhindern. Werfen Sie einen Blick auf die Token Binding Protocol und Proof Key for Code Exchange by OAuth Public Clients.

+0

Danke MvdD. Ich schätze es. Das ist sehr hilfreich. –

+0

Gern geschehen, benutzen Sie einfach die Upvote-Tasten, wenn eine Antwort hilfreich ist. Und vergiss nicht, eine Antwort als akzeptiert zu markieren. – MvdD

4

Ich denke, Sie sollten die Möglichkeit in Erwägung ziehen, dass jemand ein Token extrahieren kann, unabhängig davon, wie Sie es gesichert haben. Es existiert auf einem Gerät, über das Sie keine Kontrolle haben.

Anstatt einen Token zu übergeben, warum verhandeln Sie nicht einen geheimen Schlüssel mit dem Client und Ihrem Server? Sie können diesen Schlüssel verwenden, um ihre Anfragen an Ihren Server zu signieren, und Sie können diese Geheimnisse verfolgen - sogar widerrufen, wenn jemand abmeldet. Dies ermöglicht es Ihnen, die Verfallszeiten der Signaturen gering zu halten, so dass selbst wenn sie erfasst werden, sie nur für ein paar Minuten gut sind.

+0

Danke Travis. Du hast recht. Das Konto des Kunden ist vollständig kompromittiert, wenn jemand Zugriff auf das Telefon des Kunden erhält. Ich werde deine Methode untersuchen. –

+1

"verhandeln Sie einen geheimen Schlüssel mit dem Client und Ihrem Server" ist eine ziemlich große Handwelle. Wie unterscheidet sich ein ausgehandelter zentral gespeicherter geheimer Schlüssel von einem ausgehandelten zentral gespeicherten JWT? –