Questa domanda è stata posta alcune volte su Stack, ma non sono state fornite risposte reali. Lasciami provare comunque a spiegare la mia situazione.Facebook OAuth Login - access_token API che restituisce "Questo codice di autorizzazione è stato utilizzato"
Utilizziamo un'applicazione che utilizza il login Facebook OAuth2. Questo login ha funzionato fino alla scorsa settimana e all'improvviso ci sta preoccupando.
Applicazione di flusso:
Fase 1: presse utente di accesso con il tasto Facebook sul nostro sito web
Fase 2: Redirect alla pagina Facebook di accesso/autorizzazione
Fase 3 : Quando si autorizza l'applicazione, il callback arriva alla nostra applicazione, con un parametro "codice" di breve durata.
Fase 4: Questo "codice" param sarebbe stato scambiato per un giorno 60 token di accesso utilizzando "https://graph.facebook.com/oauth/access_token" URL.
errore nel passaggio 4:
Quando cerchiamo di scambiare la breve vita "codice" per il token di accesso, si ottiene questo errore da Facebook.
{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}
Osservazione:
- Per gli utenti che sono nuova Venendo per l'applicazione, l'errore suddetto non si verifica.
- Per un utente di ritorno questa chiamata ha esito negativo con l'errore sopra indicato.
- La nostra applicazione è attiva da più di 9 mesi e questo errore è arrivato solo negli ultimi 7-10 giorni. Abbiamo avuto migliaia di utenti che lo utilizzano con successo prima di questo.
Quello che ho già avuto da Forum:
Ecco la mia interpretazione di quello che ho letto. Potrebbe essere impreciso Facebook ha una politica strana che richiede allo sviluppatore dell'app di mantenere il codice temporaneo di 10 minuti fino alla scadenza del codice di 60 giorni ottenuto durante il primo accesso. Quindi dovremmo creare un cookie con il token di accesso sul browser dell'utente. Sono stato persino in grado di vedere persone che modificano il loro codice per creare i cookie.
Cosa mi dà davvero fastidio?
- Le soluzioni suggerite presuppongono che il cookie che creano sia sempre presente nel browser dell'utente. Questa è una cattiva ipotesi da fare, in quanto il cookie può essere cancellato in qualsiasi momento.
- Ho un altro app/app segreto che utilizzo per il mio sviluppo (i.e localhost) e che funziona perfettamente. L'accesso avviene bene là fuori, ma è solo la macchina del prodotto che ha il problema.
- Questo problema non si è verificato sulla macchina di produzione per quasi 10 mesi da quando abbiamo lanciato l'app, ed è arrivato all'improvviso. Peggio ancora, non sono in grado di ottenere alcuna registrazione delle modifiche recenti che interrompono questo flusso.
Edit:
Piattaforma: Python, Google AppEngine. Non utilizziamo alcun SDK di Facebook, effettuiamo chiamate HTTP dirette a tutti gli URL di accesso. Chiamata fallita: https://graph.facebook.com/oauth/access_token - stiamo passando l'appId, il segreto e il codice (ottenuti da facebook) entro 20 secondi dalla prima chiamata in corso.
Spero ci siano sufficienti informazioni per dimostrare che il nostro codice non è completamente errato. Qualsiasi suggerimento/suggerimento da parte di persone che hanno riscontrato e risolto questo problema è benvenuto. Se si tratta di un bug di Facebook e l'app di Facebook viene a conoscenza, sarei ancora più felice.
Il parametro di codice può essere scambiato solo per un token di accesso utente una volta. Nella tua domanda mancano informazioni utili su quale piattaforma/lingua stai utilizzando e quali sono le tue esatte chiamate API. – CBroe
@CBroe - Grazie per la notifica. Sì, comprendiamo che il codice param è una cosa una tantum e questo è il motivo per cui vogliamo scambiarlo per access_token, ma l'URL del token di accesso non funziona. Ho incluso informazioni sulla piattaforma/lingua. – Srivatsan