Jaka jest długość access_token w usłudze Facebook OAuth2?

100

Szukałem w Google i StackOverflow odpowiedzi na moje pytanie, ale nie mogę jej znaleźć.

Chciałbym przechowywać access_token w mojej bazie danych w celu uzyskania dostępu w trybie offline i chciałbym upewnić się, że określam prawidłową długość mojej kolumny.

Nie mogę nawet znaleźć, czy to tylko liczba, czy połączenie liczby i ciągów znaków.

Cyryl N.
źródło

Odpowiedzi:

128

Pracuję na Facebooku i mogę udzielić ostatecznej odpowiedzi na ten temat.

Nie ustawiaj maksymalnego rozmiaru miejsca na przechowywanie tokena dostępu. Spodziewamy się, że z czasem będą rosły i kurczyły się, gdy będziemy dodawać i usuwać dane oraz zmieniać sposób ich kodowania.

W jednym miejscu udzieliliśmy wskazówek, że to 255 znaków. Zaktualizowałem post na blogu, który zawierał te informacje, i zaktualizowałem nasze nowe dokumenty dotyczące tokenów dostępu, aby zawierały notatkę o rozmiarach:

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

Przepraszam za zamieszanie.

Christopher Blizzard
źródło
84
Dobrze, że ostateczna odpowiedź z Facebooka jest taka, że ​​zmienimy to później.
Dave Cohen,
6
Tak przynajmniej mogę się spodziewać zmiany, więc nie będę nieprzygotowany.
ZeeCoder,
Brak ograniczeń jest trochę uciążliwy, ponieważ obecnie przechowujemy go w 300-bajtowym varchar2 i zaczęliśmy mieć dziś problemy z tokenami 301-305 bajtowymi. Czy sugerujesz, aby zamiast tego użyć clob? A może jest jakiś dość duży rozmiar, którego moglibyśmy użyć?
Trampas Kirk
Zdecydowanie zachowuję tę odpowiedź, gdy następnym razem ktoś zapyta mnie „jaki maksymalny rozmiar ustawić dla tego pola” => „Nie ustawiaj żadnego maksymalnego rozmiaru, i tak będzie rosnąć”. Naprawdę to uwielbiam !! Facebook zrobiłeś mój dzień;)
Christophe Fondacci
7
MySQL wymaga górnej granicy tego. Proszę podać realistyczną górną granicę. np. 1000 znaków, 10 000 znaków, 1 000 000 000 znaków? Brak górnej granicy jest po prostu nierozsądny.
Yahya Uddin
70

Dzięki niedawnemu przejściu Facebooka na zaszyfrowane tokeny dostępu długość tokena dostępu może wynosić do 255 znaków. Jeśli przechowujesz token dostępu w swojej bazie danych, kolumna powinna być w stanie pomieścić co najmniej varchar (255). Oto fragment z bloga deweloperów Facebooka z 4 października 2011 r .:

„Po włączeniu migracji zaszyfrowanego tokena dostępu zmienił się format tokena dostępu. Nowy format tokena dostępu jest całkowicie nieprzejrzysty i nie należy polegać na formacie w swoim kodzie. Wystarczy pole varchar (255), aby przechowywać nowe tokeny ”.

Pełny post na blogu tutaj: https://developers.facebook.com/blog/post/572

Johnny Oshika
źródło
2
+1 dla zaktualizowanych informacji. To naprawdę powinna być teraz akceptowana odpowiedź.
David Boike
14
Wydaje się, że już nie obowiązuje. Niedawno otrzymałem token dostępu o długości 256 znaków.
o_o
2
To samo, co @o_o powyżej. Coraz częściej otrzymujemy żetony o długości 240 znaków, w tym kilka 255+ obecnie.
Eric Redon
To jest dziwne. Z próbki 8000 najdłuższy, jaki widziałem, ma 126 znaków.
Johnny Oshika
1
Niedawno widzieliśmy 344 tokeny dostępu do postaci.
o_o
28

Ta odpowiedź nie jest już poprawna i nie mogę znaleźć poprawionej wartości w dokumentach FB. Otrzymaliśmy tokeny dostępu dłuższe niż 255 znaków. Zamiast tego przechodzimy od VARCHAR do SMALLTEXT, aby spróbować przyszłościowo.

rodbegbie
źródło
Tak, mam 284 znaki w aplikacji produkcyjnej, więc otrzymałem błąd bazy danych, ponieważ kolumna to varchar (255) ...
Yuki Matsukura
podobnie. właśnie dostałem 257
Louis Tsai
1
SMALLTEXTczy MEDIUMTEXT? Wcześniej miałem również ograniczony access_token do VARCHAR(255)i dziś mam do czynienia z skutkami tego.
NobleUplift,
9

Z sekcji 1.4 The OAuth 2.0 Authorization Protocol( draft-ietf-oauth-v2-22 )

Tokeny dostępu mogą mieć różne formaty, struktury i metody wykorzystania (np. Właściwości kryptograficzne) w zależności od wymagań bezpieczeństwa serwera zasobów. Atrybuty tokenu dostępu i metody używane do uzyskiwania dostępu do chronionych zasobów wykraczają poza zakres tej specyfikacji i są zdefiniowane w specyfikacjach towarzyszących.

Szukałem „specyfikacji towarzyszących”, ale nie znalazłem nic istotnego, aw sekcji 11.2.2 jest napisane

o Nazwa parametru: access_token
o Miejsce użycia parametru: odpowiedź autoryzacji, odpowiedź tokena
o Zmień kontroler: IETF
o Dokument (y) specyfikacji: [[ten dokument]]

Co wydaje się wskazywać, że parametr access_token jest zdefiniowany w tej specyfikacji. Wydaje mi się, że parametr jest taki, ale rzeczywisty token dostępu nie jest w pełni dopracowany.

Aktualizacja: Najnowsza wersja tego zapisu specyfikacji ( draft-ietf-oauth-v2-31 ) zawiera dodatek, który lepiej definiuje, czego można oczekiwać od parametru access_token

A.12. Składnia „access_token”

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

  access-token = 1*VSCHAR

Zasadniczo oznacza to, że access_token powinien mieć co najmniej 1 znak, ale nie ma ograniczeń co do długości zdefiniowanej w tej specyfikacji.

Zauważ, że definiują VSCHAR =% x20-7E

Josh
źródło
5

Token dostępu do Facebooka może mieć więcej niż 255 znaków. Miałem wiele błędów, takich jak ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)token dostępu do Facebooka. Nie należy stosować stringtyp kolumny, ponieważ jego długość jest ograniczona. Możesz użyć textkolumny typu do przechowywania tokenów.

palinium
źródło
3

Ostatnio w naszej aplikacji widzieliśmy już ponad 100 znaków. Wciąż szukam dokumentacji, aby móc określić dla nich „bezpieczny” rozmiar pola.

Matt Miller
źródło
8
Co to za „dokumentacja”, o której mówisz? : D
Mark
2

Zaktualizuję odpowiedź na podstawie spędzonego czasu.

Z dokumentacji OAuth2,

Rozmiar ciągu tokena dostępu pozostaje niezdefiniowany w tej specyfikacji. Klient powinien unikać przyjmowania założeń dotyczących wielkości wartości. Serwer autoryzacyjny powinien udokumentować wielkość każdej wystawionej wartości.

(Sekcja 4.2.2 niniejszego dokumentu )

Uwaga: jak wspomniano na tej stronie, Facebook używa protokołu OAuth2 .

Tak więc teraz wydaje się, że na portalu deweloperów Facebooka nie ma żadnych informacji o długości tokena OAuth. Wydaje się, że Yahoo używa tokena o długości 400 bitów, więc najlepiej założyć, że kolumna TEXT w MySQL jest bezpieczniejsza niż varchar.

Cyryl N.
źródło