Wie lang ist das access_token in Facebook OAuth2?

100

Ich habe bei Google und StackOverflow nach einer Antwort auf meine Frage gesucht, aber keine gefunden.

Ich möchte das access_token für den Offline-Zugriff in meiner Datenbank speichern und die richtige Länge meiner Spalte angeben.

Ich kann nicht einmal finden, ob es nur eine Zahl oder eine Mischung aus Zahl und Zeichenfolge ist.

Cyril N.
quelle

Antworten:

128

Ich arbeite bei Facebook und kann eine endgültige Antwort darauf geben.

Bitte geben Sie keine maximale Größe für ein Zugriffstoken in den Speicher ein. Wir erwarten, dass sie im Laufe der Zeit wachsen und schrumpfen, wenn wir Daten hinzufügen und entfernen und ihre Codierung ändern.

Wir haben an einer Stelle eine Anleitung gegeben, dass es sich um 255 Zeichen handelt. Ich habe den Blog-Beitrag mit diesen Informationen aktualisiert und unsere neuen Zugriffstoken-Dokumente mit einem Hinweis zu den Größen aktualisiert:

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

Entschuldigung für die Verwirrung.

Christopher Blizzard
quelle
84
Es ist passend, dass die endgültige Antwort von Facebook lautet, dass wir sie später ändern werden.
Dave Cohen
6
Zumindest so kann ich die Veränderung erwarten, damit ich nicht unvorbereitet bin.
ZeeCoder
Überhaupt kein Limit zu haben, ist eine Art Schmerz, da wir es derzeit in einem 300-Byte-Varchar2 speichern und heute Probleme mit 301-305-Byte-Token haben. Schlagen Sie vor, stattdessen einen Clob zu verwenden? Oder gibt es eine ziemlich große Größe, die wir verwenden könnten?
Trampas Kirk
Ich behalte diese Antwort auf jeden Fall für das nächste Mal, wenn mich jemand fragt: "Welche maximale Größe sollen wir für dieses Feld festlegen?" => "Keine maximale Größe festlegen, sie wird trotzdem wachsen." Wirklich, ich liebe es !! Facebook du hast meinen Tag gemacht;)
Christophe Fondacci
7
MySQL erfordert hierfür eine Obergrenze. Bitte geben Sie eine realistische Obergrenze. zB 1000 Zeichen, 10.000 Zeichen, 1.000.000.000 Zeichen? Keine Obergrenze zu haben ist einfach unvernünftig.
Yahya Uddin
70

Mit der jüngsten Umstellung von Facebook auf verschlüsselte Zugriffstoken kann die Länge des Zugriffstokens bis zu 255 Zeichen betragen. Wenn Sie das Zugriffstoken in Ihrer Datenbank speichern, sollte die Spalte mindestens varchar (255) aufnehmen können. Hier ist ein Auszug aus dem Entwicklerblog von Facebook vom 4. Oktober 2011:

"Wenn die Migration des verschlüsselten Zugriffstokens aktiviert ist, hat sich das Format des Zugriffstokens geändert. Das neue Zugriffstokenformat ist vollständig undurchsichtig, und Sie sollten keine Abhängigkeit vom Format in Ihrem Code übernehmen. Ein varchar (255) -Feld reicht aus, um Speichern Sie die neuen Token. "

Vollständiger Blog-Beitrag hier: https://developers.facebook.com/blog/post/572

Johnny Oshika
quelle
2
+1 für die aktualisierten Informationen. Dies sollte jetzt wirklich die akzeptierte Antwort sein.
David Boike
14
Scheint nicht mehr gültig zu sein. Ich habe kürzlich ein Zugriffstoken mit einer Länge von 256 Zeichen erhalten.
o_o
2
Gleich wie @o_o oben. Wir bekommen zunehmend mehr als 240 Zeichen lange Token, darunter heutzutage einige mehr als 255.
Eric Redon
Das ist seltsam. Von einer Stichprobe von 8000 ist die längste, die ich gesehen habe, 126 Zeichen.
Johnny Oshika
1
Wir haben kürzlich 344 Zeichenzugriffstoken gesehen.
o_o
28

Diese Antwort ist nicht mehr korrekt und ich kann keinen korrigierten Wert in den FB-Dokumenten finden. Wir haben Zugriffstoken erhalten, die länger als 255 Zeichen sind. Wir wechseln stattdessen von VARCHAR zu SMALLTEXT, um zukunftssichere Dinge zu versuchen.

rodbegbie
quelle
Ja, ich habe 284 Zeichen in der Produktions-App, also habe ich einen Datenbankfehler erhalten, weil die Spalte varchar (255) ist ...
Yuki Matsukura
gleich. habe gerade eine 257
Louis Tsai
1
SMALLTEXToder MEDIUMTEXT? Ich hatte zuvor auch mein access_token auf beschränkt VARCHAR(255)und beschäftige mich heute mit den Folgen davon .
NobleUplift
9

Aus Abschnitt 1.4 von The OAuth 2.0 Authorization Protocol( Entwurf-ietf-oauth-v2-22 )

Zugriffstoken können je nach Sicherheitsanforderungen des Ressourcenservers unterschiedliche Formate, Strukturen und Verwendungsmethoden (z. B. kryptografische Eigenschaften) aufweisen. Zugriffstokenattribute und die Methoden für den Zugriff auf geschützte Ressourcen gehen über den Rahmen dieser Spezifikation hinaus und werden durch Begleitspezifikationen definiert.

Ich habe nach den "Begleitspezifikationen" gesucht, aber nichts Relevantes gefunden und in Abschnitt 11.2.2 heißt es

o Parametername: access_token
o Speicherort der Parameterverwendung: Autorisierungsantwort, Tokenantwort o
Controller ändern: IETF
o Spezifikationsdokument (e): [[dieses Dokument]]

Dies scheint darauf hinzudeuten, dass der Parameter access_token innerhalb dieser Spezifikation definiert ist. Was ich denke, der Parameter ist, aber das eigentliche Zugriffstoken ist nicht vollständig ausgearbeitet.

Update: Die neueste Version dieses Schreibens der Spezifikation ( Entwurf-ietf-oauth-v2-31 ) enthält einen Anhang, der besser definiert, was vom Parameter access_token zu erwarten ist

A.12. Syntax "access_token"

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

  access-token = 1*VSCHAR

Dies bedeutet im Wesentlichen, dass das access_token mindestens 1 Zeichen lang sein sollte, es gibt jedoch keine Begrenzung für die in dieser Spezifikation definierte Dauer.

Beachten Sie, dass sie VSCHAR =% x20-7E definieren

Josh
quelle
5

Der Facebook-Zugriffstoken kann länger als 255 Zeichen sein. Ich hatte viele Fehler, wie zum Beispiel, ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)wo der Wert Facebook-Zugriffstoken war. Verwenden Sie keine stringTypenspalte, da deren Länge begrenzt ist. Sie können die textTypspalte verwenden, um Token zu speichern.

Palinium
quelle
3

Vor kurzem hat unsere App sie länger als 100 Zeichen gesehen. Ich suche immer noch nach Dokumentation, damit ich eine "sichere" Feldgröße für sie herausfinden kann.

Matt Miller
quelle
8
Von was für einer "Dokumentation" sprechen Sie? : D
Mark
2

Ich werde die Antwort aus dem Zeitaufwand aktualisieren.

Aus der OAuth2-Dokumentation

Die Größe der Zugriffstoken-Zeichenfolge wird durch diese Spezifikation nicht definiert. Der Kunde sollte vermeiden, Annahmen über Wertgrößen zu treffen. Der Autorisierungsserver sollte die Größe aller ausgegebenen Werte dokumentieren.

(Abschnitt 4.2.2 dieses Dokuments )

Hinweis: Facebook verwendet OAuth2, wie auf dieser Seite erwähnt .

Daher scheinen auf der Entwickler-Website von Facebook keine Informationen über die Länge des OAuth-Tokens verfügbar zu sein. Yahoo scheint ein 400 Bit langes Token zu verwenden, daher ist es am besten anzunehmen, dass eine TEXT-Spalte in MySQL sicherer ist als ein Varchar.

Cyril N.
quelle