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.

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.


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


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.


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


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.