I token di accesso di Facebook Oauth 2.0 scadono?


124

Sto giocando con l'autorizzazione Oauth 2.0 in Facebook e mi chiedevo se i token di accesso che Facebook sviene mai scadono. In tal caso, esiste un modo per richiedere un token di accesso di lunga durata?


4
Per aggiungere alcuni dettagli a questa domanda: anche offline_access viene invalidato quando l'utente cambia la propria password di Facebook. Quindi è meglio giocare sul sicuro e ottenere nuovamente un nuovo token di accesso se si ricevono errori quando si utilizza quello vecchio.
Hoàng Long

2
Per aggiungere il riferimento: developers.facebook.com/blog/post/500
Hoàng Long,

2
ragazzi, voi tutti semplicemente rock. Qualunque sia la domanda, ho appena risolto ... Grazie a tutti
Vinay

3
Sembra che Facebook stia ritirando l'autorizzazione offline_access il 1 ° maggio. In futuro tutti i token di accesso scadranno quando il "tempo di scadenza" (60 giorni) è scaduto, l'utente cambia la sua password, l'utente revoca l'autorizzazione alla tua app o l'utente si disconnette. API . PS Non sono sicuro del motivo per cui Facebook sta impostando il nuovo "tempo di scadenza" a 60 giorni se i token di accesso scadono ancora al logout (sembra che gli utenti tendano a disconnettersi bene entro 60 giorni). Forse mi sto perdendo qualcosa ... scadenza
Steven Wexler

1
Il comportamento di access_token sta cambiando ora, dovresti cercare i "Modifiche di rottura" di luglio 2012: l'autorizzazione offline_access è stata deprecata e access_token avrà un ciclo di vita lungo.
qodeninja

Risposte:


64

Dopo aver scavato un po ', ho trovato questo. Sembra essere la risposta:

Aggiornato (11 / aprile / 2018)

  • Il token scadrà dopo circa 60 giorni.
  • Il token verrà aggiornato una volta al giorno, per un massimo di 90 giorni, quando la persona che utilizza la tua app effettua una richiesta ai server di Facebook.
  • Tutti i token di accesso devono essere rinnovati ogni 90 giorni con il consenso della persona che utilizza la tua app.

Annuncio di modifica di Facebook (10/04/2018)

Facebook ha aggiornato la pagina di scadenza del token (10/04/2018)

offline_access: consente alla tua applicazione di eseguire richieste autorizzate per conto dell'utente in qualsiasi momento. Per impostazione predefinita, la maggior parte dei token di accesso scade dopo un breve periodo di tempo per garantire che le applicazioni effettuino richieste per conto dell'utente solo quando sta utilizzando attivamente l'applicazione. Questa autorizzazione rende il token di accesso restituito dal nostro endpoint OAuth di lunga durata.

È un valore di autorizzazione richiesto.

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

AGGIORNARE

L'autorizzazione offline_access è stata rimossa qualche tempo fa.

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


2
In risposta a questo, ho avviato una libreria open source che potrebbe essere di qualche utilità per voi ragazzi. È una libreria oAuth che mira a supportare tutti i social network con implementazioni oAuth. Supporta già autorizzazioni estese inclusa la pubblicazione offline. code.google.com/p/socialoauth
Tendrid

Anche i token offline_access scadono se l'utente cambia la password su Facebook.
Bemmu

Purtroppo non è una soluzione "pulita" al problema in questione. La prima o tutte le richieste di questa autorizzazione avvisano l'utente dell'autorizzazione aggiuntiva (ad esempio, questa applicazione sarà in grado di accedere al tuo account Facebook in QUALSIASI momento), il che disattiva MOLTI potenziali clienti. Secondo, se l'uso cambia la sua password, questo token non sarà valido. Quindi ci deve essere un modo migliore (ad esempio il token di aggiornamento) per ottenere un nuovo access_token, specialmente per le applicazioni web basate su ajax rich client.
Vladimir

24
Secondo la loro documentazione API offline_access non sarà più supportato a partire dal 2 maggio 2012.
Ben Lesh

@Tendrid La tua libreria supporta solo Facebook e Twitter.
mareoraft

30

Prova questo potrebbe essere di aiuto completo per te

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/

Per ottenere il token di accesso a vita devi usare scope=offline_access

Il significato di scope=offline_accessè che: -

Consente alla tua applicazione di eseguire richieste autorizzate per conto dell'utente in qualsiasi momento. Per impostazione predefinita, la maggior parte dei token di accesso scade dopo un breve periodo di tempo per garantire che le applicazioni effettuino richieste per conto dell'utente solo quando sta utilizzando attivamente l'applicazione. Questa autorizzazione rende il token di accesso restituito dal nostro endpoint OAuth di lunga durata.

Ma in base al futuro aggiornamento di Facebook, la funzionalità offline_acees sarà deprecata per sempre dal 3 ottobre 2012. e all'utente verrà fornito un token di accesso di lunga durata di 60 giorni e prima della scadenza del token di accesso Facebook notificherà o sarà possibile ottenere la tua personalizzazione funzionalità di notifica che recupera il valore di scadenza dall'API di Facebook.


10
Vorrei informarti che fb è cambiato nella sua API e ora non è disponibile alcun token del tempo di vita, ora l'accesso offline sarà attivo per 60 giorni.
PrateekSaluja


17

Sono venuto qui con la stessa domanda dell'OP, ma le risposte che suggeriscono l'uso di offline_access stanno sollevando bandiere rosse per me.

Dal punto di vista della sicurezza, ottenere l'accesso offline all'account Facebook di un utente è qualitativamente diverso e molto più potente del semplice utilizzo di Facebook per l'accesso singolo e non dovrebbe essere usato alla leggera (a meno che non ne abbia davvero bisogno). Quando un utente concede questa autorizzazione, "l'applicazione" può esaminare l'account dell'utente da qualsiasi luogo e in qualsiasi momento. Ho messo "l'applicazione" tra virgolette perché in realtà è qualsiasi strumento che abbia le credenziali: potresti creare uno script per un'intera suite di strumenti che non hanno nulla a che fare con il server web che può accedere a qualsiasi informazione che l'utente ha accettato di condividere con quelli credenziali.

Non userei questa funzione per aggirare una breve durata del token; non è questo lo scopo previsto. In effetti, la durata del token stessa è una caratteristica di sicurezza. Sto ancora cercando dettagli sull'uso corretto di questi token (posso mantenerli? Come faccio / devo proteggerli? Facebook incorpora il "token di aggiornamento" OAuth 2.0 all'interno di quello principale? In caso contrario, dove si trova e / o come aggiorno?), ma sono abbastanza sicuro che offline_access non sia il modo giusto.


1
stessi dubbi qui, David. hai trovato maggiori informazioni su come proteggere i token archiviati per l'accesso offline?
neal aise

I documenti di Facebook sono terribili, ma penso che la situazione sia che sia ragionevolmente sicuro mantenere i token di accesso NON acquisiti con offline_access. Sebbene sia vero che chiunque vi acceda (mentre l'utente FB è ancora loggato) può fare qualsiasi cosa per cui l'utente ti ha concesso l'autorizzazione, non è poi così male poiché i token vengono invalidati non appena l'utente si disconnette da Facebook dovunque. È ancora un buco di sicurezza (trovo strano che tu non debba fornire il segreto della tua app sulle richieste / me), ma non è aperto. Se qualcuno si lamenta, è meglio che mi corregga.
David Pope

8

Sì, scadono. C'è un valore "expires" che viene passato insieme a "access_token" e da quello che posso dire sono circa 2 ore. Ho cercato, ma non vedo un modo per richiedere una scadenza più lunga.


3
Se richiedi l'autorizzazione "offline_access", il token non scadrà.
Brendan Berg

1
@Brendan: Ma verrà invalidato non appena l'utente cambierà la sua password di Facebook
Hoàng Long

@ HoàngLong qualche riferimento a questo?
Charles Prakash Dasari,


4

Puoi sempre aggiornare il token di accesso dell'utente ogni volta che l'utente accede al tuo sito tramite Facebook. L'accesso offline non può garantire di ottenere un token di accesso a vita, il token di accesso cambia ogni volta che l'utente revoca l'accesso all'applicazione o l'utente modifica la propria password.

Citato da facebook http://developers.facebook.com/docs/authentication/

Nota: se l'applicazione non ha richiesto l'autorizzazione offline_access, il token di accesso è limitato nel tempo. Anche il token di accesso con limiti di tempo viene invalidato quando l'utente si disconnette da Facebook. Se l'applicazione ha ottenuto l'autorizzazione offline_access dall'utente, il token di accesso non ha una scadenza. Tuttavia viene invalidato ogni volta che l'utente cambia la propria password.

Supponiamo di memorizzare l'uid facebook dell'utente e il token di accesso in una tabella utenti nel database, ogni volta che l'utente fa clic sul pulsante "Accedi con facebook", controlli lo stato di accesso utilizzando l'API Javascript di Facebook, quindi esamina lo stato della connessione dalla risposta , se l'utente si è connesso al tuo sito, puoi aggiornare il token di accesso nella tabella.


3

Premi questo per scambiare un token di accesso a vita breve con uno a lunga durata / senza scadenza (pagine):

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

accedere all'account Facebook e modificare le impostazioni dell'applicazione (account -> impostazione dell'applicazione -> autorizzazione aggiuntiva dell'applicazione che utilizza il tuo account). deseleziona l'autorizzazione (Accedi ai miei dati quando non sto utilizzando l'applicazione (offline_access)). Quindi face book emetterà un nuovo token quando accedi all'applicazione.



0

controlla le seguenti cose quando interagisci con l'API del grafico di Facebook.

1) L'URL di connessione dell'applicazione dovrebbe essere la base dell'URL di connessione "redirect_uri": - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) Il tuo "redirect_uri "dovrebbe essere lo stesso in entrambi i casi (quando richiedi un codice di verifica e richiedi un access_token) redirect_uri - www.x-minds.org/fb/connect/redirect 3) dovresti codificare l'argomento quando richiedi un access_token 4) non deve passare l'argomento (type = client_cred) quando richiedi un access_token. il server di autorizzazione emetterà un token senza parte di sessione. non possiamo usare questo token con l'alias "me" nell'api del grafico. Questo token avrà una lunghezza di (40) ma un token con parte di sessione avrà una lunghezza di (81). Un token di accesso senza parte di sessione funzionerà con alcuni casi

ad esempio: - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM. Ma l'API Graph con alias "me" funzionerà solo con token con parte di sessione.


0

Non so esattamente quando scadono i token, ma lo fanno, altrimenti non ci sarebbe un'opzione per dare i permessi offline.

Ad ogni modo, a volte richiedere all'utente di fornire autorizzazioni offline è eccessivo. A seconda delle tue esigenze, forse è sufficiente che il token rimanga valido fintanto che il sito web è aperto nel browser dell'utente. Per questo potrebbe esserci una soluzione più semplice: riagganciare l'utente periodicamente utilizzando un iframe: ri-login automatico di Facebook dal cookie php

Ha funzionato per me ...


0

Alcuni anni dopo, ma l'API Explorer di Facebook Graph ora ha un piccolo simbolo di informazioni accanto al token di accesso che ti consente di accedere all'app dello strumento token di accesso ed estendere il token API per un paio di mesi. Potrebbe essere utile durante lo sviluppo.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.