2010-04-22 19 views
119

Sto giocando con l'autorizzazione Oauth 2.0 su Facebook e mi chiedevo se i token di accesso di Facebook non scadono mai. In tal caso, c'è un modo per richiedere un token di accesso di lunga durata?I token di accesso di Facebook Oauth 2.0 scadono?

+4

Per aggiungere alcuni dettagli a questa domanda: anche il offline_access ottenere invalidato quando l'utente cambia la propria password/Facebook. Quindi è meglio giocare in sicurezza e ottenere un nuovo token di accesso se ricevi errori quando usi quello vecchio. –

+2

Per aggiungere il riferimento: https://developers.facebook.com/blog/post/500/ –

+2

yo ragazzi, tutto semplicemente rock. Qualunque sia la domanda, l'ho appena risolto ... Grazie mille – vinay

risposta

8

Sì, scadono. Esiste un valore 'expires' che viene passato insieme a 'access_token', e da quello che posso dire è di circa 2 ore. Ho cercato, ma non vedo un modo per richiedere un tempo di scadenza più lungo.

+3

Se si richiede l'autorizzazione 'offline_access', il token non scadrà. –

+1

@Brendan: Ma verrà invalidato non appena l'utente cambia la sua password di Facebook –

+0

@ HoàngLong qualsiasi riferimento a questo? –

61

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

offline_access: Attiva l'applicazione per 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 eseguano solo richieste per conto dell'utente quando utilizzano attivamente l'applicazione. Questa autorizzazione rende il token di accesso restituito dal nostro endpoint OAuth a lungo termine.

È richiesto un valore di autorizzazione.

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

UPDATE

permesso offline_access è stato rimosso qualche tempo fa.

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

+2

In risposta a ciò, 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 le implementazioni oAuth. Supporta già le autorizzazioni estese inclusa la pubblicazione offline. https://code.google.com/p/socialoauth/ – Tendrid

+0

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

+0

Sfortunatamente non è una soluzione "pulita" al problema in questione. Prima o tutti chiedono questa autorizzazione avvisa l'utente dell'autorizzazione aggiuntiva (ad es.questa applicazione sarà in grado di accedere al tuo account di Facebook in QUALSIASI momento), che trasforma un sacco di potenziali clienti fuori. In secondo luogo se l'uso cambia la sua password, questo token non sarà valido. Quindi deve esserci un modo migliore (ad es. Aggiornare token) per ottenere un nuovo access_token, in particolare per le applicazioni Web basate su ajax rich client. – Vladimir

0

controllo le seguenti cose quando si interagisce con il grafico facebook api.

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

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

1

accedere all'account Facebook e modificare le impostazioni dell'applicazione (account -> impostazioni dell'applicazione -> autorizzazione aggiuntiva dell'applicazione che utilizza il proprio account). deselezionare l'autorizzazione (Accedi ai miei dati quando non utilizzo l'applicazione (offline_access)). Quindi faccia prenoterà il rilascio di un nuovo token quando accedi all'applicazione.

29

Prova questo può essere che vi aiuterà pieno per voi

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 durata token di accesso è necessario utilizzare scope=offline_access

Significato scope=offline_access è che: -

Attiva l'applicazione per eseguire un richieste autorizzate per conto di l'utente in qualsiasi momento. Per impostazione predefinita, la maggior parte dei token di accesso scadono dopo un periodo di tempo limitato per garantire che le applicazioni eseguano solo richieste per conto dello dell'utente quando utilizzano attivamente l'applicazione. Questa autorizzazione rende il token di accesso restituito dal nostro endpoint OAuth di lunga durata.

Ma secondo i tuoi amici futuro upgradation la funzionalità offline_acees diventerà obsoleto per sempre dal 3 ottobre 2012. e l'utente sarà dato 60 giorni di accesso longevo token e prima della scadenza del token di accesso Facebook sarà notifica o si può ottenere la funzionalità di notifica personalizzato il recupero del valore di scadenza della API di Facebook ..

+10

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

17

sono venuto qui con la stessa domanda del PO, ma le risposte che suggeriscono l'uso di offline_access stanno alzando bandiere rosse per me.

Per quanto riguarda la protezione, l'accesso offline all'account Facebook di un utente è qualitativamente diverso e molto più potente del semplice utilizzo di Facebook per il single sign on e non deve essere utilizzato con leggerezza (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. Inserisco "l'applicazione" tra virgolette perché in realtà è uno strumento con le credenziali: è possibile creare 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 vorrei usare questa funzione per aggirare una durata breve del token; questo non è il suo scopo. In effetti, la durata del token stesso è una caratteristica di sicurezza. Sto ancora cercando dettagli sull'uso corretto di questi token (posso persisterli? Come devo/dovrei proteggerli? Facebook incorpora il token di aggiornamento OAuth 2.0 all'interno di quello principale? In caso contrario, dove è e/o come faccio ad aggiornare?), ma sono abbastanza sicuro che offline_access non è la strada giusta.

+1

stessi dubbi qui david. hai trovato ulteriori informazioni su come proteggere i token memorizzati per l'accesso offline? –

+0

I documenti di Facebook sono terribili, ma penso che la situazione sia ragionevolmente sicura per mantenere i token di accesso NON acquisiti con offline_access. Mentre è vero che chiunque abbia accesso ad esso (mentre l'utente FB è ancora loggato) può fare qualcosa per cui l'utente ti ha concesso il permesso, non è poi così male dato che 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 la tua app segreta sulle richieste/me), ma non è aperto. Se qualcuno si sente meglio, sentiti libero di correggermi. –

4

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

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

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

Si supponga di memorizzare facebook uid e token di accesso dell'utente in una tabella utenti nel database, ogni volta che l'utente fa clic sul pulsante "Login con facebook", si controlla il login statususing JavaScript API e quindi esaminare lo stato della connessione dalla risposta, se l'utente si è connesso al tuo sito, puoi quindi aggiornare il token di accesso nella tabella.

0

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

In ogni caso, a volte richiedere all'utente di concedere autorizzazioni offline è eccessivo. A seconda delle esigenze, forse è sufficiente che il token rimanga valido fino a quando il sito Web viene aperto nel browser dell'utente. Per questo ci può essere una soluzione più semplice - relogging l'utente in periodicamente utilizzando un iframe: facebook auto re-login from cookie php

Ha lavorato per me ...

21

Nota che Facebook è ormai deprecato il permesso offline_access a favore di gettoni per il quale è possibile richiedere un "upgrade" alla scadenza. Sto solo ora si occupano di questo, me stesso, quindi non ho molto altro da dire, ma questo documento può aiutare:

https://developers.facebook.com/docs/offline-access-deprecation/

3

Hit questo per scambiare una breve token di accesso di vita per un lungo vita/non in scadenza (pagine) uno:

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

Il token di base è scaduto tra un'ora. Ma si può utilizzare token 'scambio' per ottenere una lunga durata del token https://developers.facebook.com/docs/facebook-login/access-tokens

GET /oauth/access_token? 
    grant_type=fb_exchange_token&   
    client_id={app-id}& 
    client_secret={app-secret}& 
    fb_exchange_token={short-lived-token} 
Problemi correlati