2012-03-26 17 views
7

Sto tentando di utilizzare l'API di dati di YouTube di Google con PHP in base alla documentazione di Google qui: https://developers.google.com/youtube/2.0/developers_guide_protocol_oauth2#OAuth2_Refreshing_a_Token. Il mio problema arriva quando autentichi con OAuth. Sto usando il seguente URL di autorizzazione che è identico a quello che i documenti dicono di usare tranne che per il mio reindirizzamento uri e la chiave dell'applicazione, ovviamente.Aggiornamento dell'API di YouTube di Google Token non inviato

$this->authorizationUrl = 'https://accounts.google.com/o/oauth2/auth?'; 
$this->authorizationUrl .= 'client_id=' . $this->applicationKey . '&'; 
$this->authorizationUrl .= 'redirect_uri=' . $this->redirect_uri . '/account.php?action=youtube_oauth&'; 
$this->authorizationUrl .= 'scope=https://gdata.youtube.com&'; 
$this->authorizationUrl .= 'response_type=code&'; 
$this->authorizationUrl .= 'access_type=offline'; 

Poi, come dicono i documenti, io arricciare le seguenti:

$curl_options = Array(
      CURLOPT_POSTFIELDS => Array(
       'code' => $code, 
       'client_id' => $this->applicationKey, 
       'client_secret' => $this->applicationSecret, 
       'redirect_uri' => $this->redirect_uri . '/account.php?action=youtube_oauth', 
       'grant_type' => 'authorization_code' 
      ), 
      CURLOPT_RETURNTRANSFER => true, 
      CURLOPT_URL => 'https://accounts.google.com/o/oauth2/token' 
     ); 

Tuttavia, la mia risposta non mi dà un refresh_token come la loro documentazione dice che dovrebbe. Ho appena ricevuto gli altri tre elementi di risposta.

Alcune domande come questa: Get refresh token google api hanno detto di utilizzare approval_prompt = force, ma anche questo non funziona e vanifica completamente lo scopo di avere access_type = offline.

Qualche idea sul motivo per cui riceverei una risposta valida con 3 dei 4 elementi di risposta?

risposta

2

Puoi provare google oauth2 (https://code.google.com/oauthplayground/) e vedere quali sono le differenze tra i tuoi parametri e lì.

28

Dal offline access parte dei documenti OAuth2.0:

Quando l'applicazione riceve un gettone di aggiornamento, è importante conservare quel segno di aggiornamento per un utilizzo futuro. Se l'applicazione perde il token di aggiornamento, sarà necessario richiedere nuovamente all'utente prima di ottenere un altro token di aggiornamento. Se è necessario per richiedere nuovamente l'autorizzazione, includere il parametro approval_prompt nella richiesta del codice di autorizzazione e impostare il valore su force.

Così, quando si è già concesso l'accesso, le richieste successive per un grant_type di authorization_code potranno non restituire il refresh_token, anche se access_type è stato fissato a offline in stringa di query della pagina consenso.

Come indicato nella citazione di cui sopra, al fine di ottenere una nuova refresh_token dopo aver già ricevendo uno, è necessario inviare il proprio utente indietro attraverso il prompt, che si può fare impostando approval_prompt-force.

Cheers,

PS Questo cambiamento è stato annunciato in una blog post pure.

+1

Grazie per la soluzione! – WHITECOLOR

+3

Qualcuno accetta come risposta! –

+1

Per il beneficio di qualcun altro che soffre della mia confusione, una volta ottenuto un 'token di aggiornamento 'non è necessario _refresh_ anche perché è possibile utilizzare lo stesso più e più volte. L'unica volta che dovresti aver bisogno di una nuova è se la perdi o l'utente revoca il tuo accesso. – jeteon

Problemi correlati