Какова длина access_token в Facebook OAuth2?

100

Я искал в Google и StackOverflow ответ на свой вопрос, но не могу его найти.

Я хотел бы сохранить access_token в моей базе данных для автономного доступа, и я хотел бы обязательно указать правильную длину моего столбца.

Я даже не могу понять, это просто число или смесь числа и строк.

Кирилл Н.
источник

Ответы:

128

Я работаю в Facebook и могу дать исчерпывающий ответ по этому поводу.

Пожалуйста, не устанавливайте максимальный размер хранилища для токена доступа. Мы ожидаем, что они будут как расти, так и уменьшаться со временем по мере добавления и удаления данных и изменения способа их кодирования.

Мы действительно дали руководство в одном месте о том, что это 255 символов. Я обновил сообщение в блоге, в котором была эта информация, и обновил нашу новую документацию по токенам доступа, чтобы включить примечание о размерах:

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

Извините за путаницу.

Кристофер Близзард
источник
84
Вполне естественно, что окончательный ответ от Facebook - мы собираемся изменить это позже.
Дэйв Коэн,
6
По крайней мере, так я могу ожидать перемен, так что я не останусь без подготовки.
ZeeCoder
Отсутствие ограничения вообще - это своего рода боль, поскольку в настоящее время мы храним его в 300-байтовой varchar2, и сегодня у нас возникли проблемы с 301-305-байтовыми токенами. Вы предлагаете вместо этого использовать тряпку? Или есть какой-нибудь достаточно большой размер, который мы могли бы использовать?
Trampas Kirk
Я определенно сохраню этот ответ до следующего раза, когда меня спросят «какой максимальный размер мы должны установить для этого поля» => «Не устанавливайте максимальный размер, он все равно будет расти». На самом деле мне это нравится !! Facebook ты сделал мой день;)
Christophe Fondacci
7
MySQL требует для этого верхнего предела. Пожалуйста, дайте реалистичный верхний предел. например, 1000 символов, 10 000 символов, 1 000 000 000 символов? Отсутствие верхней границы просто неразумно.
Яхья Уддин
70

С недавним переходом Facebook на зашифрованные токены доступа длина токена доступа может составлять до 255 символов. Если вы храните токен доступа в своей базе данных, столбец должен содержать как минимум varchar (255). Вот выдержка из блога разработчиков Facebook от 4 октября 2011 года:

"При включенной миграции зашифрованного токена доступа формат токена доступа изменился. Новый формат токена доступа полностью непрозрачен, и вы не должны зависеть от формата в вашем коде. Для этого достаточно поля varchar (255). хранить новые жетоны ".

Полная запись в блоге здесь: https://developers.facebook.com/blog/post/572

Джонни Ошика
источник
2
+1 за обновленную информацию. Теперь это действительно должен быть принятый ответ.
Дэвид Бойке
14
Кажется, больше не действует. Недавно я получил токен доступа длиной 256 символов.
o_o
2
То же, что и @o_o выше. Мы все чаще получаем токены длиной 240+ символов, в том числе несколько 255+ в настоящее время.
Эрик Редон
Это странно. Из выборки из 8000 самый длинный, который я видел, составляет 126 символов.
Johnny Oshika
1
Недавно мы увидели 344 жетона доступа к персонажам.
o_o
28

Этот ответ больше неверен, и я не могу найти исправленное значение в документации FB. Мы получаем токены доступа длиной более 255 символов. Вместо этого мы переходим от VARCHAR к SMALLTEXT, чтобы попытаться обеспечить соответствие требованиям будущего.

Родбегби
источник
Да, у меня 284 символа в производственном приложении, поэтому я получил ошибку базы данных из-за того, что столбец - varchar (255) ...
Юки Мацукура,
тем же. только что получил 257
Луи Цай
1
SMALLTEXTили MEDIUMTEXT? Раньше у меня был доступ к access_token, VARCHAR(255)и сегодня я столкнулся с его последствиями.
NobleUplift
9

Из раздела 1.4 The OAuth 2.0 Authorization Protocol( draft-ietf-oauth-v2-22 )

Маркеры доступа могут иметь разные форматы, структуры и методы использования (например, криптографические свойства) в зависимости от требований безопасности сервера ресурсов. Атрибуты токена доступа и методы, используемые для доступа к защищенным ресурсам, выходят за рамки данной спецификации и определяются сопутствующими спецификациями.

Я поискал «сопутствующие спецификации», но не нашел ничего подходящего, и в разделе 11.2.2 говорится

o Имя параметра: access_token
o Место использования параметра: ответ авторизации, ответ токена
o Контроллер изменений: IETF
o Документ (-ы) спецификации: [[этот документ]]

Это, кажется, указывает на то, что параметр access_token определен в этой спецификации. Как я полагаю, это параметр, но фактический токен доступа не полностью конкретизирован.

Обновление: последняя версия данной спецификации ( draft-ietf-oauth-v2-31 ) включает приложение, которое лучше определяет, чего ожидать от параметра access_token.

А.12. Синтаксис "access_token"

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

  access-token = 1*VSCHAR

По сути, это означает, что access_token должен иметь длину не менее 1 символа, но нет ограничений на длину, определенную в этой спецификации.

Обратите внимание, что они определяют VSCHAR =% x20-7E

Джош
источник
5

Токен доступа к Facebook может быть длиннее 255 символов. У меня было много ошибок, например, ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)где значение было токеном доступа к facebook. Не используйте stringстолбец типа, потому что его длина ограничена. Вы можете использовать textстолбец типа для хранения токенов.

палиний
источник
3

В последнее время наше приложение видит их длиной более 100 символов. Я все еще ищу документацию, чтобы определить для них «безопасный» размер поля.

Мэтт Миллер
источник
8
Что это за «документация»? : D
Марк
2

Я обновлю ответ по потраченному времени.

Из документации OAuth2,

Размер строки токена доступа не определен данной спецификацией. Клиент должен избегать предположений о размерах стоимости. Сервер авторизации должен задокументировать размер любого значения, которое он выдает.

(Раздел 4.2.2 этого документа )

Примечание. Facebook использует OAuth2, как указано на этой странице .

Так что теперь, похоже, на портале разработчиков Facebook нет информации о длине токена OAuth. Yahoo, похоже, использует токен длиной 400 бит, поэтому лучше предположить, что столбец TEXT в MySQL безопаснее, чем varchar.

Кирилл Н.
источник