Яка тривалість 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 байтовими маркерами. Ви пропонуєте використовувати замість нього клобу? Або є якісь досить великі розміри, які ми могли б використати?
Трампас Кірк

Я безумовно зберігаю цю відповідь наступного разу, коли хтось запитає мене, "який максимальний розмір слід встановити для цього поля" => "Не встановлюйте жоден максимальний розмір, він все одно зросте". Дійсно, я люблю це !! Facebook ви зробили мій день;)
Крістоф Фондчі

7
Для цього MySQL вимагає верхньої межі. Будь ласка, дайте реалістичну верхню межу. наприклад 1000 символів, 10000 символів, 1 000 000 000 символів? Немає верхньої межі - просто безпідставно.
Яхья Уддін

70

З недавнього переходу Facebook на зашифровані маркери доступу, довжина маркера доступу може становити до 255 символів. Якщо ви зберігаєте маркер доступу у вашій базі даних, стовпець повинен містити принаймні варчар (255). Ось уривок із блогу розробників Facebook від 4 жовтня 2011 року:

"Якщо включена міграція зашифрованого доступу, маркер доступу змінився. Новий формат маркера доступу є абсолютно непрозорим, і вам не слід приймати залежність від формату у вашому коді. Варчар (255) Поле буде достатньо для зберігайте нові жетони ".

Повна публікація в блозі тут: https://developers.facebook.com/blog/post/572


2
+1 для оновленої інформації. Це справді має бути прийнятою відповіддю зараз.
Девід Бойке

14
Здається, більше не дійсно. Нещодавно я отримав маркер доступу довжиною 256 символів.
o_o

2
Те саме, що і @o_o вище. Ми все більше отримуємо 240 символів довгих символів, включаючи кілька 255+ на сьогоднішній день.
Ерік Редон

Це дивно. Із зразка 8000 найдовший, який я бачив, - це 126 символів.
Джонні Ошика

1
Нещодавно ми бачили 344 символи доступу.
o_o

28

Ця відповідь більше не є правильною, і я не можу знайти виправлене значення у документах FB. Ми отримували маркери доступу довжиною понад 255 символів. Ми замість цього переходимо від VARCHAR до SMALLTEXT, щоб спробувати переконатися у майбутньому.


Так, у виробничому додатку я отримав 284 символи, тому я отримав помилку в базі даних через колонку varchar (255) ...
Yuki Matsukura

те саме. щойно отримав 257
Луї Цай

1
SMALLTEXTабо MEDIUMTEXT? Раніше я також обмежував свій access_token VARCHAR(255)і сьогодні маю справу з наслідками цього.
NobleUplift

9

З розділу 1.4 The OAuth 2.0 Authorization Protocol( проект-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 безпечніший, ніж варчар.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.