Qual é o comprimento do access_token no Facebook OAuth2?

100

Eu pesquisei no Google e no StackOverflow para encontrar uma resposta para minha pergunta, mas não consigo encontrar uma.

Eu gostaria de armazenar o access_token em meu banco de dados para acesso offline e gostaria de ter certeza de especificar o comprimento correto de minha coluna.

Não consigo nem descobrir se é apenas um número ou uma mistura de número e cordas.

Cyril N.
fonte

Respostas:

128

Trabalho no Facebook e posso dar uma resposta definitiva sobre isso.

Não coloque um tamanho máximo de armazenamento para um token de acesso. Esperamos que eles cresçam e diminuam com o tempo, à medida que adicionamos e removemos dados e mudamos a forma como eles são codificados.

Em um lugar, demos orientações sobre os 255 caracteres. Eu atualizei a postagem do blog que continha essas informações e atualizei nossos novos documentos de token de acesso para incluir uma observação sobre os tamanhos:

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

Desculpe pela confusão.

Christopher Blizzard
fonte
84
É apropriado que a resposta definitiva do Facebook seja que vamos mudar isso mais tarde.
Dave Cohen
6
Pelo menos assim posso esperar a mudança, para não ficar despreparado.
ZeeCoder
Não ter limite é uma espécie de dor, pois atualmente estamos armazenando-o em um varchar2 de 300 bytes e começamos a ter problemas hoje com tokens de 301-305 bytes. Você está sugerindo que usemos um clob em vez disso? Ou existe algum tamanho razoavelmente grande que possamos usar?
Trampas Kirk de
Definitivamente, guardo essa resposta para a próxima vez que alguém me perguntar "qual tamanho máximo devemos definir para este campo" => "Não defina nenhum tamanho máximo, ele vai crescer de qualquer maneira". Sério, eu amo isso !! Facebook você fez meu dia;)
Christophe Fondacci
7
O MySQL requer um limite superior para isso. Por favor, dê um limite superior realista. por exemplo, 1000 caracteres, 10.000 caracteres, 1.000.000.000 de caracteres? Não ter limite superior é simplesmente irracional.
Yahya Uddin
70

Com a recente mudança do Facebook para tokens de acesso criptografados, o comprimento do token de acesso pode ser de até 255 caracteres. Se você estiver armazenando o token de acesso em seu banco de dados, a coluna deve ser capaz de acomodar pelo menos varchar (255). Aqui está um trecho do blog de desenvolvedores do Facebook de 4 de outubro de 2011:

"Com a migração do token de acesso criptografado ativada, o formato do token de acesso mudou. O novo formato do token de acesso é completamente opaco e você não deve depender do formato do seu código. Um campo varchar (255) será suficiente para armazene os novos tokens. "

Postagem completa do blog aqui: https://developers.facebook.com/blog/post/572

Johnny Oshika
fonte
2
1 para as informações atualizadas. Esta realmente deveria ser a resposta aceita agora.
David Boike
14
Parece não ser mais válido. Recentemente, recebi um token de acesso de 256 caracteres.
o_o
2
O mesmo que @o_o acima. Estamos recebendo cada vez mais tokens de mais de 240 caracteres, incluindo mais de 255 hoje em dia.
Eric Redon
Isso é estranho. De uma amostra de 8.000, a mais longa que vi tem 126 caracteres.
Johnny Oshika
1
Recentemente, vimos tokens de acesso de 344 caracteres.
o_o
28

Esta resposta não está mais correta, e não consigo encontrar um valor corrigido nos documentos do FB. Temos recebido tokens de acesso com mais de 255 caracteres. Estamos mudando de VARCHAR para SMALLTEXT em vez de tentar coisas à prova de futuro.

Rodbegbie
fonte
Sim, recebi 284 caracteres no aplicativo de produção, então recebi um erro de banco de dados devido à coluna é varchar (255) ...
Yuki Matsukura
mesmo. acabei de receber um 257
Louis Tsai
1
SMALLTEXTou MEDIUMTEXT? Anteriormente, eu também tinha meu access_token restrito a VARCHAR(255)e estou lidando com as consequências disso hoje.
NobleUplift
9

Da seção 1.4 de The OAuth 2.0 Authorization Protocol( draft-ietf-oauth-v2-22 )

Os tokens de acesso podem ter diferentes formatos, estruturas e métodos de utilização (por exemplo, propriedades criptográficas) com base nos requisitos de segurança do servidor de recursos. Os atributos de token de acesso e os métodos usados ​​para acessar recursos protegidos estão além do escopo desta especificação e são definidos por especificações complementares.

Procurei as "especificações complementares", mas não encontrei nada relevante e na seção 11.2.2 ele afirma

o Nome do parâmetro: access_token
o Local de uso do parâmetro: resposta de autorização, resposta de token
o Controlador de mudança: IETF
o Documento (s) de especificação: [[este documento]]

O que parece indicar que o parâmetro access_token é definido dentro desta especificação. Acho que o parâmetro é, mas o token de acesso real não foi totalmente desenvolvido.

Atualização: A última versão deste escrito da especificação ( draft-ietf-oauth-v2-31 ) inclui um apêndice que define melhor o que esperar do parâmetro access_token

A.12. Sintaxe de "access_token"

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

  access-token = 1*VSCHAR

Então, essencialmente, o que isso significa é que o access_token deve ter pelo menos 1 caractere, mas não há limite de quanto tempo definido nesta especificação.

Observe que eles definem VSCHAR =% x20-7E

Josh
fonte
5

O token de acesso do Facebook pode ter mais de 255 caracteres. Eu tive muitos erros como ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)onde o valor era o token de acesso do Facebook. Não use stringcoluna de tipo porque seu comprimento é limitado. Você pode usar a textcoluna de tipo para armazenar tokens.

palínio
fonte
3

Recentemente, nosso aplicativo os viu com mais de 100 caracteres. Ainda estou procurando por documentação para poder descobrir um tamanho de campo 'seguro' para eles.

Matt Miller
fonte
8
De que "documentação" você fala? : D
Marcos
2

Vou atualizar a resposta do tempo gasto.

Na documentação do OAuth2,

O tamanho da string do token de acesso não é definido por esta especificação. O cliente deve evitar fazer suposições sobre tamanhos de valor. O servidor de autorização deve documentar o tamanho de qualquer valor que ele emita.

(Seção 4.2.2 de deste documento )

Observação: o Facebook está usando OAuth2, conforme mencionado em nesta página .

Portanto, agora, nenhuma informação parece estar disponível no portal de desenvolvedores do Facebook sobre o tamanho do token OAuth. O Yahoo parece usar um token de 400 bits, portanto, é melhor assumir que uma coluna TEXT no MySQL é mais segura do que um varchar.

Cyril N.
fonte