¿Cuál es la longitud del access_token en Facebook OAuth2?


100

Busqué en Google y StackOverflow para encontrar una respuesta a mi pregunta, pero no puedo encontrar una.

Me gustaría almacenar el access_token en mi base de datos para el acceso sin conexión y me gustaría asegurarme de especificar la longitud correcta de mi columna.

Ni siquiera puedo encontrar si es solo un número o una mezcla entre número y cadenas.

Respuestas:


128

Trabajo en Facebook y puedo dar una respuesta definitiva sobre esto.

No ponga un tamaño máximo en el almacenamiento para un token de acceso. Esperamos que crezcan y se reduzcan con el tiempo a medida que agregamos y eliminamos datos y cambiamos la forma en que se codifican.

Dimos una guía en un lugar sobre 255 caracteres. Actualicé la publicación del blog que tenía esa información y actualicé nuestros nuevos documentos de token de acceso para incluir una nota sobre los tamaños:

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

Perdón por la confusion.


84
Es apropiado que la respuesta definitiva de Facebook sea que la cambiaremos más tarde.
Dave Cohen

6
Al menos de esta manera puedo esperar el cambio, así no estaré desprevenido.
ZeeCoder

No tener ningún límite es una especie de molestia, ya que actualmente lo estamos almacenando en un varchar2 de 300 bytes y comenzamos a tener problemas hoy con los tokens de 301-305 bytes. ¿Estás sugiriendo que usemos un clob en su lugar? ¿O hay algún tamaño razonablemente grande que podamos usar?
Trampas Kirk

Definitivamente guardo esa respuesta para la próxima vez que alguien me pregunte "qué tamaño máximo deberíamos establecer para este campo" => "No establezca ningún tamaño máximo, de todos modos crecerá". Realmente me encanta !! Facebook me
alegraste el

7
MySQL requiere un límite superior en esto. Por favor, dé un límite superior realista. por ejemplo, 1000 caracteres, 10,000 caracteres, 1,000,000,000 de caracteres? No tener un límite superior es simplemente irrazonable.
Yahya Uddin

70

Con el reciente movimiento de Facebook hacia los tokens de acceso cifrados, la longitud del token de acceso puede ser de hasta 255 caracteres. Si está almacenando el token de acceso en su base de datos, la columna debería poder acomodar al menos varchar (255). Aquí hay un extracto del blog de desarrolladores de Facebook del 4 de octubre de 2011:

"Con la migración del token de acceso cifrado habilitada, el formato del token de acceso ha cambiado. El nuevo formato del token de acceso es completamente opaco y no debe depender del formato de su código. Un campo varchar (255) será suficiente para almacenar los nuevos tokens ".

Publicación completa del blog aquí: https://developers.facebook.com/blog/post/572


2
+1 para la información actualizada. Esta debería ser realmente la respuesta aceptada ahora.
David Boike

14
Parece que ya no es válido. Recientemente recibí un token de acceso de 256 caracteres.
o_o

2
Igual que @o_o arriba. Cada vez recibimos más tokens de más de 240 caracteres, incluidos unos 255+ en la actualidad.
Eric Redon

Eso es extraño. De una muestra de 8000, la más larga que he visto tiene 126 caracteres.
Johnny Oshika

1
Recientemente hemos visto 344 tokens de acceso de personajes.
o_o

28

Esta respuesta ya no es correcta y no puedo encontrar un valor corregido en los documentos de FB. Hemos recibido tokens de acceso que tienen más de 255 caracteres. En su lugar, nos estamos moviendo de VARCHAR a SMALLTEXT para intentar hacer cosas a prueba de futuro.


Sí, obtuve 284 caracteres en la aplicación de producción, así que obtuve un error en la base de datos debido a que la columna es varchar (255) ...
Yuki Matsukura

mismo. Acabo de recibir un 257
Louis Tsai

1
SMALLTEXTo MEDIUMTEXT? Anteriormente también tenía mi access_token restringido VARCHAR(255)y estoy lidiando con las consecuencias de eso hoy.
NobleUplift

9

De la sección 1.4 de The OAuth 2.0 Authorization Protocol( draft-ietf-oauth-v2-22 )

Los tokens de acceso pueden tener diferentes formatos, estructuras y métodos de utilización (por ejemplo, propiedades criptográficas) según los requisitos de seguridad del servidor de recursos. Los atributos del token de acceso y los métodos utilizados para acceder a los recursos protegidos están fuera del alcance de esta especificación y están definidos por especificaciones complementarias.

Busqué las "especificaciones complementarias" pero no encontré nada relevante y en la sección 11.2.2 dice

o Nombre del parámetro: access_token
o Ubicación de uso del parámetro: respuesta de autorización, respuesta del token
o Controlador de cambios: IETF
o Documento (s) de especificación: [[este documento]]

Lo que parece indicar que el parámetro access_token está definido dentro de esta especificación. Lo que supongo que es el parámetro, pero el token de acceso real no está completamente desarrollado.

Actualización: la última versión de este escrito de la especificación ( borrador-ietf-oauth-v2-31 ) incluye un apéndice que define mejor qué esperar del parámetro access_token

A.12. Sintaxis de "access_token"

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

  access-token = 1*VSCHAR

Entonces, esencialmente, lo que esto significa es que el access_token debe tener al menos 1 carácter de longitud, pero no hay límite sobre cuánto tiempo se define en esta especificación.

Tenga en cuenta que definen VSCHAR =% x20-7E


5

El token de acceso de Facebook puede tener más de 255 caracteres. Tuve muchos errores, como ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)dónde el valor era el token de acceso a Facebook. No use stringcolumna de tipo porque su longitud es limitada. Puede usar la textcolumna de tipo para almacenar tokens.


3

Recientemente, nuestra aplicación los ha visto con más de 100 caracteres. Todavía estoy buscando documentación para poder encontrar un tamaño de campo 'seguro' para ellos.


8
¿Qué es esta "documentación" de la que habla? : D
Mark

2

Actualizaré la respuesta del tiempo invertido.

De la documentación de OAuth2,

Esta especificación no define el tamaño de la cadena del token de acceso. El cliente debe evitar hacer suposiciones sobre el tamaño de los valores. El servidor de autorización debe documentar el tamaño de cualquier valor que emita.

(Sección 4.2.2 de este documento )

Nota: Facebook usa OAuth2, como se menciona en esta página .

Así que ahora, parece que no hay información disponible en el portail de desarrolladores de Facebook sobre la longitud del token OAuth. Yahoo parece usar un token de 400 bits de largo, por lo que es mejor asumir que una columna TEXT en MySQL es más segura que un varchar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.