2016-04-15 26 views
5

Używam następujący technologii stosJaki jest najlepszy typ danych MYSQL lub Maria DB do przechowywania tokena JWT?

  • laravel 5,2
  • MySQL

i bezpieczeństwa Używam JWT (JSON Web Tokens)

udało mi się zabezpieczyć moje aplikacje korzystające z JWT.

Chciałbym przechowywać token JWT w bazie danych mysql.

PYTANIE Który z poniższych typów danych najlepiej przechowywać token JWT w MySQL DB?

  1. VARCHAR
  2. CLOB
  3. TEKST
  4. długi tekst
+0

Czy JWT nie wymaga przechowywania w bazie danych? – ceejayoz

+0

@ceejayoz Odświeżanie tokenów może być również samymi JWT i uważam, że trzeba je przechowywać w magazynie danych. – georaldc

Odpowiedz

5

Jak z niczego innego, odpowiedź brzmi "to zależy".

Najpierw należy ustalić, czy właściwe jest przechowywanie w pełni zakodowanych JWT. Zwykle nie przechowuję łańcucha JWT, a zamiast tego przechowuję oświadczenia użyte do skonstruowania JWT, co pozwoli zaoszczędzić mnóstwo miejsca w bazie danych.

Jeśli zdecydujesz, że przechowywanie JWT jest właściwą metodą, możemy spojrzeć na twoje opcje.

TEKST i LONGTEXT są po prostu typami CLOB, więc możemy zignorować ten.

Obydwa TEKSTY i VARCHAR mają ograniczenia 64 kb, więc wszystko powyżej będzie wymagało LONGTEXT (lub MEDIUMTEXT, o którym nie wspomniałeś, ale jest opcja).

Różnica między TEKSTEM a VARCHAR polega na tym, że VARCHAR jest przechowywany w wierszu, ale TEKST jest w zasadzie wskaźnikiem. VARCHAR będzie szybszy, jeśli będziesz często czytał JWT, ale większe ciągi sprawią, że każdy pojedynczy wiersz będzie większy, co będzie hitem wydajności.

Zwykle tak duże, jak JWT, powiedziałbym, że TEXT jest całkiem dobrym wyborem do przechowywania JWT w bazie danych. Jeśli masz całkowitą pewność, że te Śledztwa będą bardzo małe, to VARCHAR może zapewnić lepszą wydajność odczytu, ale najlepiej byłoby przetestować dane z prawdziwego świata, aby mieć pewność.

Jeśli potrzebujesz pola większego niż TEKST, możesz powtórzyć moje zalecenie, aby uniknąć zapisywania zakodowanych JWT, ale opcja LONGTEXT jest tam dostępna.

+0

Postanowiłem, że skorzystam z porady Michaela w sprawie: przechowywania danych o roszczeniach. Wydaje się, że pole "jti" zostało stworzone - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679

1

oparciu o przykład, chciałbym zaproponować to dla „” base64 zakodowany znak:

TEXT CHARACTER SET ascii COLLATE ascii_bin 

Ogólnie JSON powinna być jakaś wielkość TEXT lub VARCHAR z CHARACTER SET utf8 lub utf8mb4. (COLLATION prawdopodobnie nie będzie miało znaczenia.)

TEXT jest ograniczona do 64 KB; nie ma dużej przewagi w używaniu mniejszego VARCHAR.

Re: "TEXT to tylko wskaźnik" - Nie do końca poprawne. W niektórych ROW_FORMATs w InnoDB, albo TEXT lub VARCHAR może być wskaźnikiem do rozszerzenia do rzędu. Działanie zależy głównie od ROW_FORMAT, a nie od typu danych.