2011-07-15 17 views
13

Pracuję od this reference i próbuję wdrożyć protokół OAuth, aby umożliwić użytkownikom logowanie się do mojej witryny za pośrednictwem Facebooka. Jednak dokumentacja Facebooka jest dość okropna i niejasna w kilku kluczowych częściach.W jaki sposób odnawiasz wygasły token dostępu Facebook?

Mówi, że autoryzacja trwa trzy etapy:

  1. uwierzytelniania użytkownika (przekierować użytkownika do https://facebook.com/dialog/oauth?client_id=...&redirect_uri=... i oczekują, że strona redirect_uri zostać odwołany z code). Działa świetnie!

  2. Autoryzacja aplikacji (obsługiwana przez Facebook itp.). Działa świetnie!

  3. uwierzytelniania App (Na stronie zwrotnej, chwyć code dostać i nazywają https://graph.facebook.com/oauth/access_token?client_id=...&redirect_uri=...&client_secret=...&code=.... Ciało odpowiedź będzie zawierać access_token musimy robić rzeczy)

Rozumiem, że z access_token , Mogę zadzwonić do API i takie. Ale co się stanie, gdy wygasa? Mogę dostać nowy, ale w tym momencie będzie wiele żądań HTTP później, a ja już nie mam code użyłem, aby go uzyskać w pierwszej kolejności. Czy muszę przechowywać code wzdłuż strony access_token? Czy muszę nakazać użytkownikowi zalogowanie się ponownie, aby uzyskać nową code, aby uzyskać nową access_token?

Czy brakuje tu kluczowej części? Nie potrzebuję tokena offline_access, ponieważ będę pobierał dane tylko w odpowiedzi na akcje użytkownika.

Odpowiedz

25

Po wygaśnięciu access_token użytkownik będzie postrzegany przez Facebooka jako "wylogowany". Twoja aplikacja przechodzi przez ten sam proces, co po raz pierwszy, ale użytkownik nie może tego zrobić.

Jeśli użytkownik nie odwołał dostępu do aplikacji, a użytkownik jest zalogowany na Facebooku w tym czasie, proces autoryzacji aplikacji zajmie się sam, bez żadnych czynności wymaganych przez użytkownika, a otrzymasz nowy access_token.

Jeśli użytkownik nie odwołał dostępu do aplikacji, ale nie zalogował się na Facebooku, zostanie im przedstawiony login na Facebooku w kroku Autoryzacja aplikacji. Nie będą prosić o ponowne przyznanie Twojej aplikacji, ponieważ Facebook wie, że Twój identyfikator aplikacji jest autoryzowany przez tego użytkownika.

Na koniec, jeśli użytkownik odwołał dostęp, zostanie mu przedstawione pierwotne żądanie autoryzacji aplikacji, a użytkownik zastosuje oryginalny przepływ.

Zasadniczo należy rozważyć access_token jako lotny i nie przeszkadza przechowywanie go, ale przy użyciu access_token pojawić jako część procesu logowania użytkownika, co dzieje się za kulisami przez cały czas, a tylko z udziałem użytkownika podczas wylogowują się z Facebooka lub odwołują dostęp do aplikacji.

To coś innego niż OAuth na Twitterze, dzięki któremu można go przechowywać i używać ponownie.

+0

A więc, czekaj, czy mówisz, że powinienem ponownie uwierzytelniać się przy każdym ładowaniu strony? Czy to nie podwoi liczby żądań do mojego serwera? –

+1

Musisz tylko ponownie uwierzytelnić się po wygaśnięciu access_token. Odpowiedź, w której uzyskuje się parametr access_token, obejmuje również parametr expires, który określa liczbę sekund do wygaśnięcia access_token. Wiesz, kiedy wydaje się token, więc musisz tylko sprawdzić, czy wygasł na podstawie liczby sekund. Jeśli tak, weź nowy. Jeśli tak się nie stało, używaj go dalej. – Owen

+0

Oh, okay. Na szczęście jest to wniosek, do którego doszedłem wcześniej. Po prostu wstawiam przekierowanie na początek procedury OAuth, gdy wygasa token. –

5

Z dokumentacji Facebooku połączonego w swoim pytaniu:

Po wygaśnięciu żeton, trzeba będzie ponownie uruchomić powyższe kroki do wygenerować nowy kod i access_token, chociaż jeśli użytkownik ma już Autoryzowałeś swoją aplikację, nie będą oni prosić o powtórzenie tej czynności.

Po wygaśnięciu access_token konieczne będzie uzyskanie nowego, wykonując te same kroki. Użytkownik będzie musiał się ponownie zalogować, a będziesz musiał uzyskać nowy code, a następnie nowy access_token.

Powiązane problemy