Czy tokeny dostępu Facebook Oauth 2.0 wygasają?


124

Bawię się autoryzacją Oauth 2.0 na Facebooku i zastanawiałem się, czy tokeny dostępu, które Facebook traci, kiedykolwiek stracą ważność. Jeśli tak, czy istnieje sposób zażądania tokena dostępu o przedłużonej trwałości?


4
Aby dodać trochę szczegółów do tego pytania: nawet offline_access zostanie unieważniony, gdy użytkownik zmieni swoje hasło na Facebooku. Dlatego lepiej jest grać bezpiecznie i ponownie uzyskać nowy token dostępu, jeśli podczas korzystania ze starego pojawi się błąd.
Hoàng Long


2
yo, wszyscy po prostu rządzicie. Jakiekolwiek jest pytanie, po prostu je rozwiązuję ... Dziękuję wszystkim
vinay,

3
Wygląda na to, że Facebook wycofuje uprawnienie offline_access 1 maja. W przyszłości wszystkie tokeny dostępu wygasną, gdy upłynie „czas wygaśnięcia” (60 dni), użytkownik zmieni swoje hasło, cofnie autoryzację aplikacji lub wyloguje się. API . PS Nie jestem pewien, dlaczego Facebook ustawia nowy „czas wygaśnięcia” na 60 dni, jeśli tokeny dostępu nadal będą tracić ważność po wylogowaniu (wydaje się, że użytkownicy zwykle wylogowują się w ciągu 60 dni). Może brakuje mi czegoś ... wygaśnięcia
Steven Wexler

1
Zachowanie access_token zmienia się teraz, należy sprawdzić „Breaking Changes” z lipca 2012 r. - uprawnienie offline_access jest przestarzałe, a access_token będzie miał długi cykl życia.
qodeninja

Odpowiedzi:


64

Po pewnym czasie znalazłem to. Wydaje się, że to odpowiedź:

Zaktualizowano (11 kwietnia 2018 r.)

  • Token wygaśnie po około 60 dniach.
  • Token będzie odświeżany raz dziennie przez maksymalnie 90 dni, gdy osoba korzystająca z Twojej aplikacji wyśle ​​żądanie do serwerów Facebooka.
  • Wszystkie tokeny dostępu należy odnawiać co 90 dni za zgodą osoby korzystającej z Twojej aplikacji.

Ogłoszenie zmiany na Facebooku (10.04.2018)

Zaktualizowana strona wygaśnięcia tokena na Facebooku (10.04.2018)

offline_access: umożliwia aplikacji wykonywanie autoryzowanych żądań w imieniu użytkownika w dowolnym momencie. Domyślnie większość tokenów dostępu wygasa po krótkim czasie, aby aplikacje wysyłały żądania w imieniu użytkownika tylko wtedy, gdy aktywnie korzystają z aplikacji. To uprawnienie sprawia, że ​​token dostępu zwracany przez nasz punkt końcowy OAuth jest długotrwały.

Wymagana jest wartość pozwolenia.

http://developers.facebook.com/docs/authentication/permissions

AKTUALIZACJA

Uprawnienie offline_access zostało usunięte jakiś czas temu.

https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/


2
W odpowiedzi na to założyłem bibliotekę open source, która może się wam przydać. Jest to biblioteka oAuth, która ma na celu obsługę wszystkich sieci społecznościowych z implementacjami OAuth. Obsługuje już rozszerzone uprawnienia, w tym publikowanie offline. code.google.com/p/socialoauth
Tendrid

Nawet tokeny offline_access tracą ważność, jeśli użytkownik zmieni swoje hasło na Facebooku.
Bemmu,

Niestety nie jest to „czyste” rozwiązanie problemu. Przede wszystkim prośba o to pozwolenie ostrzega użytkownika o dodatkowym zezwoleniu (np. Ta aplikacja będzie mogła uzyskać dostęp do twojego konta na Facebooku w DOWOLNYM momencie), co wyłącza WIELU potencjalnych klientów. Po drugie, jeśli użytkownik zmieni swoje hasło, ten token nie będzie ważny. Musi więc istnieć lepszy sposób (np. Odświeżanie tokena), aby uzyskać nowy access_token, szczególnie dla aplikacji internetowych opartych na Ajax z bogatym klientem.
Vladimir,

24
Zgodnie z ich dokumentacją API offline_access nie będzie już obsługiwane od 2 maja 2012 r.
Ben Lesh

@Tendrid Twoja biblioteka obsługuje tylko Facebook i Twitter.
mareoraft

30

Spróbuj tego, może to pomoże ci w pełni

https://graph.facebook.com/oauth/authorize?
    client_id=127605460617602&
scope=offline_access,read_stream,user_photos,user_videos,publish_stream&
    redirect_uri=http://www.example.com/

Aby otrzymać dożywotni token dostępu, musisz użyć scope=offline_access

Znaczenie scope=offline_accessjest następujące:

Umożliwia aplikacji wykonywanie autoryzowanych żądań w imieniu użytkownika w dowolnym momencie. Domyślnie większość tokenów dostępu wygasa po krótkim czasie, aby aplikacje wysyłały żądania w imieniu użytkownika tylko wtedy, gdy aktywnie korzystają z aplikacji. To uprawnienie sprawia, że ​​token dostępu zwracany przez nasz punkt końcowy OAuth jest długotrwały.

Ale zgodnie z przyszłą aktualizacją Facebooka, funkcjonalność offline_acees zostanie wycofana na zawsze od 3 października 2012 r., A użytkownik otrzyma 60-dniowy token dostępu, a przed wygaśnięciem tokena dostępu Facebook powiadomi lub możesz uzyskać niestandardowy funkcja powiadomień pobierająca wartość wygaśnięcia z interfejsu API Facebooka.


10
Chciałbym poinformować, że fb zmienił się w jego api i teraz nie jest dostępny żaden żeton życia, teraz dostęp offline będzie aktywny przez 60 dni.
PrateekSaluja


17

Przyszedłem tutaj z tym samym pytaniem co OP, ale odpowiedzi sugerujące użycie offline_access budzą we mnie czerwone flagi.

Z punktu widzenia bezpieczeństwa uzyskanie dostępu offline do konta użytkownika na Facebooku jest jakościowo inne i znacznie bardziej wydajne niż zwykłe używanie Facebooka do pojedynczego logowania i nie powinno być używane lekko (chyba że naprawdę tego potrzebujesz). Gdy użytkownik przyzna to uprawnienie, „aplikacja” może sprawdzić konto użytkownika z dowolnego miejsca w dowolnym czasie. Umieściłem „aplikację” w cudzysłowie, ponieważ jest to właściwie dowolne narzędzie, które ma dane uwierzytelniające - możesz napisać skrypt całego zestawu narzędzi, które nie mają nic wspólnego z serwerem WWW, który ma dostęp do wszystkich informacji, które użytkownik zgodził się im udostępnić kwalifikacje.

Nie użyłbym tej funkcji do obejścia krótkiego okresu istnienia tokenu; to nie jest jego zamierzone przeznaczenie. Rzeczywiście, sam okres istnienia tokenu jest funkcją bezpieczeństwa. Nadal szukam szczegółów dotyczących prawidłowego użycia tych tokenów (czy mogę je utrwalić? Jak je / należy zabezpieczyć? Czy Facebook osadza „token odświeżania” OAuth 2.0 w głównym tokenie? Jeśli nie, to gdzie on jest i / lub jak odświeżyć?), ale jestem prawie pewien, że dostęp offline nie jest właściwy.


1
te same wątpliwości, David. czy znalazłeś więcej informacji o tym, jak zabezpieczyć tokeny przechowywane na potrzeby dostępu offline?
neal aise

Dokumentacja Facebooka jest okropna, ale myślę, że sytuacja jest taka, że ​​utrzymywanie tokenów dostępu NIE uzyskanych za pomocą dostępu offline_access jest dość bezpieczne. Chociaż prawdą jest, że każdy, kto uzyska do niego dostęp (gdy użytkownik FB jest nadal zalogowany), może zrobić wszystko, na co użytkownik udzielił Ci pozwolenia, nie jest tak źle, ponieważ tokeny są unieważniane, gdy tylko użytkownik wyloguje się z Facebooka gdziekolwiek. Wciąż jest to luka w zabezpieczeniach (wydaje mi się dziwne, że nie musisz podawać tajemnicy swojej aplikacji w żądaniach / me), ale nie jest otwarta. Jeśli ktoś zdziwi się, lepiej mnie popraw.
David Pope

8

Tak, wygasają. Istnieje wartość „expires”, która jest przekazywana wraz z „access_token” iz tego, co wiem, to około 2 godzin. Szukałem, ale nie widzę sposobu, aby poprosić o dłuższy czas ważności.


3
Jeśli poprosisz o uprawnienie „offline_access”, token nie wygaśnie.
Brendan Berg

1
@Brendan: Ale zostanie unieważnione, gdy tylko użytkownik zmieni swoje hasło na Facebooku
Hoàng Long

@ HoàngDługie odniesienie do tego?
Charles Prakash Dasari,


4

Zawsze możesz odświeżyć token dostępu użytkownika za każdym razem, gdy loguje się on do Twojej witryny za pośrednictwem Facebooka. Dostęp w trybie offline nie może zagwarantować, że otrzymasz dożywotni token dostępu, token dostępu zmienia się, gdy użytkownik unieważnia dostęp do aplikacji lub użytkownik zmienia swoje hasło.

Cytat z Facebooka http://developers.facebook.com/docs/authentication/

Uwaga: jeśli aplikacja nie zażądała uprawnienia offline_access, token dostępu jest ograniczony czasowo. Token dostępu ograniczony czasowo również zostanie unieważniony, gdy użytkownik wyloguje się z Facebooka. Jeśli aplikacja uzyskała uprawnienie offline_access od użytkownika, token dostępu nie wygasa. Jednak zostaje ono unieważnione, gdy użytkownik zmieni swoje hasło.

Załóżmy, że przechowujesz identyfikator użytkownika Facebooka i token dostępu w tabeli użytkowników w swojej bazie danych, za każdym razem, gdy użytkownik kliknie przycisk „Zaloguj się z Facebookiem”, sprawdzasz status logowania za pomocą interfejsu API Facebook Javascript, a następnie sprawdzasz stan połączenia z odpowiedzi , jeśli użytkownik połączył się z Twoją witryną, możesz zaktualizować token dostępu w tabeli.


3

Kliknij, aby wymienić krótkotrwały token dostępu na długi żyjący / niewygasający (strony):

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

1

zaloguj się na konto na Facebooku i edytuj ustawienia aplikacji (konto -> ustawienia aplikacji -> dodatkowe uprawnienia aplikacji, która korzysta z Twojego konta). usuń zaznaczenie uprawnienia (Dostęp do moich danych, gdy nie używam aplikacji (dostęp offline)). Wtedy facebook zarezerwuje wystawienie nowego tokena po zalogowaniu się do aplikacji.



0

Sprawdź następujące rzeczy podczas interakcji z interfejsem graficznym Facebooka.

1) Adres URL połączenia aplikacji powinien być podstawą adresu URL połączenia „redirect_uri”: - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) Twój „redirect_uri” ”powinno być takie samo w obu przypadkach (gdy żądasz kodu weryfikacyjnego i żądania tokena_dostępu) redirect_uri - www.x-minds.org/fb/connect/redirect 3) powinieneś zakodować argument, gdy żądasz access_token 4) nie powinien przekazywać argumentu (type = client_cred), gdy żądasz access_token. serwer autoryzacyjny wyda token bez części sesyjnej. nie możemy użyć tego tokenu z aliasem „ja” w graficznym interfejsie API. Ten token będzie miał długość (40), ale token z częścią sesyjną będzie miał długość (81). W niektórych przypadkach zadziała token dostępu bez części sesyjnej

np .: - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM. Ale Graph API z aliasem „ja” będzie działać tylko z tokenem z częścią sesyjną.


0

Nie wiem, kiedy dokładnie tokeny wygasają, ale tak się dzieje, w przeciwnym razie nie byłoby opcji nadania uprawnień offline.

W każdym razie czasami wymaganie od użytkownika udzielenia uprawnień offline to przesada. W zależności od Twoich potrzeb może wystarczy, że token będzie ważny tak długo, jak długo strona będzie otwarta w przeglądarce użytkownika. W tym celu może być prostsze rozwiązanie - okresowe ponowne logowanie użytkownika za pomocą ramki iframe: facebook automatyczne ponowne logowanie z pliku cookie php

Pracował dla mnie ...


0

Nastąpiło to kilka lat później, ale Facebook Graph API Explorer ma teraz mały symbol informacji obok tokenu dostępu, który umożliwia dostęp do aplikacji narzędzia tokenu dostępu i przedłużenie tokenu API na kilka miesięcy. Może być pomocny w rozwoju.

wprowadź opis obrazu tutaj

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.