Qual è la lunghezza del token di accesso in Facebook OAuth2?


100

Ho cercato su Google e StackOverflow per trovare una risposta alla mia domanda ma non riesco a trovarne una.

Vorrei memorizzare access_token nel mio database per l'accesso offline e vorrei essere sicuro di specificare la lunghezza corretta della mia colonna.

Non riesco nemmeno a trovare se è solo un numero o un mix tra numero e stringhe.

Risposte:


128

Lavoro in Facebook e posso dare una risposta definitiva al riguardo.

Si prega di non inserire una dimensione massima nello spazio di archiviazione per un token di accesso. Ci aspettiamo che cresceranno e si ridurranno nel tempo man mano che aggiungiamo e rimuoviamo dati e cambiamo il modo in cui sono codificati.

Abbiamo fornito indicazioni in un punto sul fatto che fosse 255 caratteri. Ho aggiornato il post del blog che conteneva tali informazioni e ho aggiornato i nostri nuovi documenti sui token di accesso per includere una nota sulle dimensioni:

https://developers.facebook.com/docs/facebook-login/access-tokens/

Dispiace per la confusione.


84
È giusto che la risposta definitiva di Facebook sia che la cambieremo in seguito.
Dave Cohen

6
Almeno così posso aspettarmi il cambiamento, quindi non sarò impreparato.
ZeeCoder

Non avere alcun limite è un po 'una seccatura poiché attualmente lo stiamo memorizzando in un varchar2 da 300 byte e abbiamo iniziato ad avere problemi oggi con i token da 301-305 byte. Stai suggerendo di usare invece un clob? O c'è qualche dimensione ragionevolmente grande che potremmo usare?
Trampas Kirk

Tengo decisamente quella risposta per la prossima volta che qualcuno mi chiede "quale dimensione massima dovremmo impostare per questo campo" => "Non impostare alcuna dimensione massima, crescerà comunque". Davvero, lo adoro !! Facebook mi hai reso la giornata;)
Christophe Fondacci

7
MySQL richiede un limite superiore su questo. Si prega di dare un upperbound realistico. es. 1000 caratteri, 10.000 caratteri, 1.000.000.000 di caratteri? Non avere un limite superiore è semplicemente irragionevole.
Yahya Uddin

70

Con il recente passaggio di Facebook ai token di accesso crittografati, la lunghezza del token di accesso può essere fino a 255 caratteri. Se stai archiviando il token di accesso nel tuo database, la colonna dovrebbe essere in grado di ospitare almeno varchar (255). Ecco un estratto dal blog degli sviluppatori di Facebook del 4 ottobre 2011:

"Con la migrazione del token di accesso crittografato abilitata, il formato del token di accesso è cambiato. Il nuovo formato del token di accesso è completamente opaco e non dovresti dipendere dal formato nel tuo codice. Un campo varchar (255) sarà sufficiente per memorizzare i nuovi gettoni. "

Post completo del blog qui: https://developers.facebook.com/blog/post/572


2
+1 per le informazioni aggiornate. Questa dovrebbe essere davvero la risposta accettata ora.
David Boike

14
Sembra non più valido. Recentemente ho ricevuto un token di accesso di 256 caratteri.
o_o

2
Come @o_o sopra. Stiamo ricevendo sempre più gettoni lunghi più di 240 caratteri, inclusi alcuni 255+ oggigiorno.
Eric Redon,

È strano. Su un campione di 8000, il più lungo che ho visto è di 126 caratteri.
Johnny Oshika

1
Recentemente abbiamo visto 344 gettoni di accesso ai personaggi.
o_o

28

Questa risposta non è più corretta e non riesco a trovare un valore corretto nei documenti di FB. Abbiamo ricevuto token di accesso più lunghi di 255 caratteri. Stiamo invece passando da VARCHAR a SMALLTEXT per provare cose a prova di futuro.


Sì, ho ricevuto 284 caratteri nell'app di produzione, quindi ho ricevuto un errore del database a causa della colonna varchar (255) ...
Yuki Matsukura

stesso. appena ricevuto un 257
Louis Tsai il

1
SMALLTEXTo MEDIUMTEXT? In precedenza avevo anche il mio access_token limitato a VARCHAR(255)e oggi ho a che fare con le conseguenze di questo.
NobleUplift

9

Dalla sezione 1.4 di The OAuth 2.0 Authorization Protocol( draft-ietf-oauth-v2-22 )

I token di accesso possono avere diversi formati, strutture e metodi di utilizzo (ad es. Proprietà crittografiche) in base ai requisiti di sicurezza del server di risorse. Gli attributi del token di accesso ei metodi utilizzati per accedere alle risorse protette esulano dall'ambito di questa specifica e sono definiti dalle specifiche complementari.

Ho cercato le "specifiche del compagno" ma non ho trovato nulla di rilevante e nella sezione 11.2.2 si afferma

o Nome parametro: access_token
o Posizione utilizzo parametro: risposta autorizzazione, risposta token
o Modifica controller: IETF
o Documento / i di specifica: [[questo documento]]

Il che sembra indicare che il parametro access_token è definito all'interno di questa specifica. Che immagino sia il parametro, ma il token di accesso effettivo non è completamente sviluppato.

Aggiornamento: l'ultima versione di questa scrittura della specifica ( draft-ietf-oauth-v2-31 ) include un'appendice che definisce meglio cosa aspettarsi dal parametro access_token

A.12. "access_token" Sintassi

The "access_token" element is defined in Section 4.2.2 and
Section 5.1:

  access-token = 1*VSCHAR

Quindi essenzialmente ciò che questo significa è che access_token dovrebbe essere lungo almeno 1 carattere ma non c'è limite al tempo definito in questa specifica.

Nota che definiscono VSCHAR =% x20-7E


5

Il token di accesso a Facebook può essere più lungo di 255 caratteri. Ho avuto molti errori come ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)dove il valore era il token di accesso di Facebook. Non utilizzare la stringcolonna del tipo perché la sua lunghezza è limitata. È possibile utilizzare la textcolonna del tipo per archiviare i token.


3

Di recente, la nostra app li vede per più di 100 caratteri. Sto ancora cercando la documentazione in modo da poter capire una dimensione del campo "sicura" per loro.


8
Cos'è questa "documentazione" di cui parli? : D
Marco

2

Aggiornerò la risposta dal tempo speso.

Dalla documentazione di OAuth2,

La dimensione della stringa del token di accesso non è definita da questa specifica. Il cliente dovrebbe evitare di fare ipotesi sulle dimensioni dei valori. Il server di autorizzazione dovrebbe documentare la dimensione di qualsiasi valore emesso.

(Sezione 4.2.2 di questo documento )

Nota: Facebook utilizza OAuth2, come menzionato in questa pagina .

Quindi ora, sul portail degli sviluppatori di Facebook non sembra essere disponibile alcuna informazione sulla lunghezza del token OAuth. Yahoo sembra utilizzare un token lungo 400 bit, quindi è meglio presumere che una colonna TEXT in MySQL sia più sicura di un varchar.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.