Quelle est la longueur du access_token dans Facebook OAuth2?

100

J'ai cherché sur Google et StackOverflow pour trouver une réponse à ma question, mais je n'en trouve pas.

Je voudrais stocker le access_token dans ma base de données pour un accès hors ligne et je voudrais être sûr de spécifier la longueur correcte de ma colonne.

Je ne peux même pas trouver si c'est juste un nombre ou un mélange entre un nombre et des chaînes.

Cyril N.
la source

Réponses:

128

Je travaille chez Facebook et je peux donner une réponse définitive à ce sujet.

Veuillez ne pas mettre de taille maximale sur le stockage pour un jeton d'accès. Nous nous attendons à ce qu'ils grandissent et diminuent au fil du temps à mesure que nous ajoutons et supprimons des données et que nous modifions leur codage.

Nous avons donné des conseils en un seul endroit sur le fait qu'il s'agissait de 255 caractères. J'ai mis à jour le billet de blog contenant ces informations et mis à jour nos nouveaux documents sur les jetons d'accès pour inclure une note sur les tailles:

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

Désolé pour la confusion.

Christopher Blizzard
la source
84
Il est normal que la réponse définitive de Facebook soit que nous allons la changer plus tard.
Dave Cohen le
6
Au moins de cette façon, je peux m'attendre au changement, donc je ne serai pas au dépourvu.
ZeeCoder
N'avoir aucune limite est un peu pénible car nous le stockons actuellement dans un varchar2 de 300 octets et avons commencé à avoir des problèmes aujourd'hui avec des jetons de 301-305 octets. Proposez-vous d'utiliser un clob à la place? Ou y a-t-il une taille raisonnablement grande que nous pourrions utiliser?
Trampas Kirk
Je garde définitivement cette réponse pour la prochaine fois que quelqu'un me demandera "quelle taille maximum devrions-nous définir pour ce champ" => "Ne définissez aucune taille maximum, ça va grossir de toute façon". Vraiment, j'adore !! Facebook tu as fait ma journée;)
Christophe Fondacci
7
MySQL nécessite une limite supérieure à ce sujet. Veuillez donner une limite supérieure réaliste. par exemple 1 000 caractères, 10 000 caractères, 1 000 000 000 de caractères? Ne pas avoir de limite supérieure est tout simplement déraisonnable.
Yahya Uddin
70

Avec le récent passage de Facebook aux jetons d'accès cryptés, la longueur du jeton d'accès peut aller jusqu'à 255 caractères. Si vous stockez le jeton d'accès dans votre base de données, la colonne doit pouvoir accueillir au moins varchar (255). Voici un extrait du blog des développeurs de Facebook du 4 octobre 2011:

"Lorsque la migration du jeton d'accès chiffré est activée, le format du jeton d'accès a changé. Le nouveau format du jeton d'accès est complètement opaque et vous ne devez prendre aucune dépendance sur le format de votre code. Un champ varchar (255) sera suffisant pour stocker les nouveaux jetons. "

Article de blog complet ici: https://developers.facebook.com/blog/post/572

Johnny Oshika
la source
2
+1 pour les informations mises à jour. Cela devrait vraiment être la réponse acceptée maintenant.
David Boike
14
Semble plus valide. J'ai récemment reçu un jeton d'accès de 256 caractères.
o_o
2
Identique à @o_o ci-dessus. Nous obtenons de plus en plus de jetons longs de plus de 240 caractères, dont quelques 255+ de nos jours.
Eric Redon
C'est étrange. Sur un échantillon de 8000, le plus long que j'ai vu est de 126 caractères.
Johnny Oshika
1
Nous avons récemment vu 344 jetons d'accès de personnages.
o_o
28

Cette réponse n'est plus correcte et je ne trouve pas de valeur corrigée dans la documentation de FB. Nous avons reçu des jetons d'accès de plus de 255 caractères. Nous passons de VARCHAR à un SMALLTEXT à la place pour essayer des choses à l'épreuve du temps.

rodbegbie
la source
Oui, j'ai 284 caractères dans l'application de production, donc j'ai eu une erreur de base de données car la colonne est varchar (255) ...
Yuki Matsukura
même. vient d'avoir un 257
Louis Tsai
1
SMALLTEXTou MEDIUMTEXT? J'avais également auparavant mon access_token limité à VARCHAR(255)et je suis confronté aux retombées de cela aujourd'hui.
NobleUplift
9

À partir de la section 1.4 de The OAuth 2.0 Authorization Protocol( draft-ietf-oauth-v2-22 )

Les jetons d'accès peuvent avoir différents formats, structures et méthodes d'utilisation (par exemple, propriétés cryptographiques) en fonction des exigences de sécurité du serveur de ressources. Les attributs de jeton d'accès et les méthodes utilisées pour accéder aux ressources protégées sortent du cadre de cette spécification et sont définis par des spécifications complémentaires.

J'ai cherché les "spécifications du compagnon" mais je n'ai rien trouvé de pertinent et dans la section 11.2.2 il est indiqué

o Nom du paramètre: access_token
o Emplacement d'utilisation du paramètre: réponse d'autorisation, réponse de jeton
o Contrôleur de changement: IETF
o Document (s) de spécification: [[ce document]]

Ce qui semble indiquer que le paramètre access_token est défini dans cette spécification. Je suppose que le paramètre est, mais le jeton d'accès réel n'est pas complètement étoffé.

Mise à jour: La dernière version de cette rédaction de la spécification ( draft-ietf-oauth-v2-31 ) comprend une annexe qui définit mieux à quoi s'attendre du paramètre access_token

A.12. Syntaxe "access_token"

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

  access-token = 1*VSCHAR

Donc, essentiellement, ce que cela signifie, c'est que le jeton d'accès doit avoir au moins 1 caractère mais il n'y a pas de limite sur la durée définie dans cette spécification.

Notez qu'ils définissent VSCHAR =% x20-7E

Josh
la source
5

Le jeton d'accès Facebook peut comporter plus de 255 caractères. J'ai eu beaucoup d'erreurs comme ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)où la valeur était le jeton d'accès Facebook. N'utilisez pas de stringcolonne de type car sa longueur est limitée. Vous pouvez utiliser la textcolonne de type pour stocker des jetons.

palinium
la source
3

Récemment, notre application les a vus plus de 100 caractères. Je suis toujours à la recherche de documentation pour pouvoir trouver une taille de champ «sûre» pour eux.

Matt Miller
la source
8
De quelle «documentation» parlez-vous? : D
Mark
2

Je mettrai à jour la réponse à partir du temps passé.

À partir de la documentation OAuth2,

La taille de la chaîne du jeton d'accès n'est pas définie par cette spécification. Le client doit éviter de faire des hypothèses sur les tailles de valeur. Le serveur d'autorisation doit documenter la taille de toute valeur qu'il émet.

(Section 4.2.2 de ce document )

Remarque: Facebook utilise OAuth2, comme indiqué sur cette page .

Alors maintenant, aucune information ne semble être disponible sur le portail développeurs de Facebook sur la longueur du token OAuth. Yahoo semble utiliser un jeton de 400 bits, il est donc préférable de supposer qu'une colonne TEXT dans MySQL est plus sûre qu'un varchar.

Cyril N.
la source