2016-04-15 12 views
5

Ich verwende den folgenden Technologie-StackWas ist der beste MYSQL- oder Maria DB-Datentyp zum Speichern des JWT-Tokens?

  • Laravel 5.2
  • MySQL

und für Sicherheit Ich benutze JWT (JSON Web Tokens)

Ich war in der Lage zu sichern meine Anwendungen mit JWT.

Ich möchte JWT-Token in Mysql-Datenbank speichern.

FRAGE Welcher der folgenden Datentypen ist am besten, um JWT-Token in MySQL DB zu speichern?

  1. VARCHAR
  2. CLOB-
  3. TEXT
  4. LONG TEXT
+0

Ist es nicht der Sinn eines JWT, dass es nicht in der Datenbank gespeichert werden muss? – ceejayoz

+0

@ceejayoz Refresh-Tokens können auch JWTs sein und ich glaube, man müsste sie in einem Datenspeicher speichern. – georaldc

Antwort

5

Wie bei allem anderen, ist die Antwort "es kommt".

Zuerst müssen Sie feststellen, ob das Speichern des vollständig codierten JWT die richtige Lösung ist. Ich neige dazu, die JWT-Zeichenfolge nicht zu speichern und stattdessen die Ansprüche zu speichern, die zum Erstellen der JWT verwendet wurden, wodurch eine Menge Speicherplatz in der Datenbank gespart wird.

Wenn Sie sich entscheiden, dass das Speichern des JWT die richtige Methode ist, dann können wir Ihre Optionen betrachten.

TEXT und LONGTEXT sind nur Typen von CLOB, also können wir das ignorieren.

TEXT und VARCHAR haben beide Grenzen von 64kb, so dass alles darüber LONGTEXT (oder MEDIUMTEXT, die Sie nicht erwähnt haben, aber eine Option ist) erfordern.

Der Unterschied zwischen TEXT und VARCHAR ist, dass VARCHAR in der Zeile gespeichert wird, aber TEXT ist im Grunde ein Zeiger. VARCHAR wird schneller sein, wenn Sie die JWT oft lesen werden, aber größere Strings werden dazu führen, dass jede einzelne Zeile größer wird, was ein Performance-Hit wird.

Mit so groß wie JWTs neigen, würde ich sagen, dass TEXT eine ziemlich gute Wahl ist, JWTs in der Datenbank zu speichern. Wenn Sie absolut sicher sind, dass die JWTs sehr klein bleiben, dann kann ein VARCHAR eine bessere Leseleistung erzielen, aber Sie würden am besten mit realen Daten testen, um sicher zu gehen.

Wenn Sie ein Feld benötigen, das größer ist als TEXT, dann wiederhole ich meine Empfehlung, das Speichern des codierten JWT zu vermeiden, aber LONGTEXT ist eine Option.

+0

Ich entschied mich, Michaels Rat zu nehmen: Speichern der Schadensdaten. Das "jti" -Feld scheint dafür gemacht zu werden - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679

1

Basierend auf dem Beispiel würde ich dies vorschlagen, für ein 'codiert' base64 token:

TEXT CHARACTER SET ascii COLLATE ascii_bin 

Im Allgemeinen JSON sollte eine gewisse Größe von TEXT oder VARCHAR mit CHARACTER SET utf8 oder utf8mb4 sein. (Die COLLATION ist wahrscheinlich irrelevant.)

TEXT ist auf 64 KB begrenzt; Es gibt keinen großen Vorteil bei der Verwendung eines kleineren VARCHAR.

Re: "TEXT ist nur ein Zeiger" - Nicht ganz richtig. In einigen ROW_FORMATs in InnoDB kann entweder TEXT oder VARCHAR ein Zeiger auf eine Erweiterung der Zeile sein. Die Aktion hängt hauptsächlich vom ROW_FORMAT ab, nicht vom Datentyp.

Verwandte Themen