2016-04-15 13 views
5

Sto utilizzando il seguente stack tecnologicoQual è il miglior tipo di dati MYSQL o Maria DB per memorizzare il token JWT?

  • laravel 5.2
  • MySQL

e per la sicurezza che sto utilizzando JWT (JSON Web Gettoni)

sono stato in grado di garantire le mie applicazioni che utilizzano JWT.

Desidero memorizzare il token JWT nel database mysql.

DOMANDA Quale dei seguenti tipo di dati è migliore per conservare JWT token nel DB MySQL?

  1. VARCHAR
  2. CLOB
  3. TESTO
  4. lungo testo
+0

Non è il punto di una JWT che non deve essere memorizzato nel database? – ceejayoz

+0

@ceejayoz I token di aggiornamento possono anche essere JWT e ritengo che sia necessario archiviarli in un archivio dati. – georaldc

risposta

5

Come ogni altra cosa, la risposta è "dipende".

Innanzitutto, è necessario determinare se la memorizzazione del JWT completamente codificato è la soluzione corretta. Tendo a non archiviare la stringa JWT e memorizzo invece le attestazioni utilizzate per costruire il JWT, il che salverà una tonnellata di spazio nel database.

Se si decide che memorizzare il JWT è il metodo corretto, quindi possiamo guardare le opzioni.

TEXT e LONGTEXT sono solo tipi di CLOB, quindi possiamo ignorarlo.

TEXT e VARCHAR hanno entrambi limiti di 64kb, quindi qualsiasi valore superiore a quello richiederà LONGTEXT (o MEDIUMTEXT, che non hai menzionato ma è un'opzione).

La differenza tra TEXT e VARCHAR è che VARCHAR è memorizzato nella riga ma TEXT è fondamentalmente un puntatore. VARCHAR sarà più veloce se stai leggendo il JWT spesso, ma stringhe più grandi faranno sì che ogni singola riga sia più grande, il che sarà un successo in termini di prestazioni.

Con dimensioni pari a quelle dei JWT, direi che TEXT è una scelta piuttosto buona per archiviare le JWT nel database. Se sei assolutamente sicuro che le JWT rimarranno molto piccole, allora un VARCHAR potrebbe produrre prestazioni di lettura migliori, ma sarebbe meglio testare con dati del mondo reale per essere sicuro.

Se è necessario fornire un campo più grande di TEXT, ripeterei il mio consiglio per evitare di memorizzare il JWT codificato, ma LONGTEXT è un'opzione disponibile.

+0

Ho deciso di prendere il consiglio di Michael: archiviare i dati delle richieste. Il campo "jti" sembra fatto apposta per questo - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679

1

Sulla base dell'esempio, vorrei suggerire questo per un 'codificato' token Base64:

TEXT CHARACTER SET ascii COLLATE ascii_bin 

In generale, JSON dovrebbe essere una certa dimensione del TEXT o VARCHAR con CHARACTER SET utf8 o utf8mb4. (È probabile che lo COLLATION sia irrilevante.)

TEXT è limitato a 64 KB; non c'è molto vantaggio nell'usare un VARCHAR più piccolo.

Ri: "TEXT è solo un puntatore" - Non del tutto corretto. In alcuni ROW_FORMATs in InnoDB, sia TEXT o VARCHAR potrebbe essere un puntatore a un'estensione della riga. L'azione dipende principalmente dallo ROW_FORMAT, non dal tipo di dati.

Problemi correlati