2015-05-11 13 views
8

Sto tentando di offrire un periodo di prova gratuito per la mia estensione di Chrome e ho seguito il Chrome documentation su come questo può essere realizzato."OAuth2 non concesso o revocato" durante il tentativo di valutare la prova gratuita nell'estensione di Chrome

Quando i miei carichi di estensione, però, lo script di fondo sta registrando il seguente errore alla console:

incontrollato runtime.lastError durante l'esecuzione identity.getAuthToken: OAuth2 non concesso o revocato.

La console punta alla chiamata a chrome.identity.getAuthToken come colpevole. Ecco il codice relativo nel mio script di fondo:

var CWS_LICENSE_API_URL = 'https://www.googleapis.com/chromewebstore/v1.1/userlicenses/'; 

chrome.identity.getAuthToken({ 
    'interactive': false 
}, function(token) { 
    console.log('token', token); 

    var req = new XMLHttpRequest(); 
    req.open('GET', CWS_LICENSE_API_URL + chrome.runtime.id); 
    req.setRequestHeader('Authorization', 'Bearer ' + token); 
    req.onreadystatechange = function() { 
     if (req.readyState == 4) { 
      var license = JSON.parse(req.responseText); 
      console.log('license', license); 
     } 
    }; 
    req.send(); 
}); 

mio manifesto è impostato in questo modo (alcuni pezzi omesse per brevità):

"manifest_version": 2, 
"key": "kkkkkkkkkkkkkkk", 

"background": { 
    "scripts": [ 
     "background.js" 
    ] 
}, 
"permissions": [ 
    "storage", 
    "identity", 
    "https://www.googleapis.com/" 
], 
"oauth2": { 
    "client_id": "cccccccccc.apps.googleusercontent.com", 
    "scopes": [ 
     "https://www.googleapis.com/auth/chromewebstore.readonly" 
    ] 
} 

Ecco quello che ho provato o confermati:

  1. L'ID client corrisponde al valore nella console di sviluppatore di Google che è stato generato utilizzando l'ID della mia estensione.
  2. L'API di Chrome Web Store è abilitata nella console degli sviluppatori di Google (è l'unica API abilitata).
  3. La chiave nel manifest corrisponde al valore generato dopo aver inserito l'estensione nel negozio web.
  4. Chiamando getAuthToken con la modalità interattiva abilitata risulta lo stesso errore.
  5. Ho paragonato il mio codice a this example e nulla mi salta come sostanzialmente diverso (anche se un paio di occhi in più per confermare non farebbe male).

Nel caso in cui è importante, sto usando Chrome 42.0.2311.135 (64-bit) su Mac OS X.

Tutte le idee su ciò che sta causando l'errore e che cosa ho bisogno di cambiare per renderlo andare via così posso cercare il token auth e la licenza?

+0

Sto facendo esattamente quello che stai facendo e mi stavo chiedendo, cosa dovrei inserire come URL del referrer nella console di Google Apis.La chiave Api per il web store Chrome Api – Kerndog73

+0

@ Kerndog73 - Non ricordo di dover inserire un referrer nella console delle API di Google. Ho attivato l'API di Chrome Web Store e ho creato un ID cliente. L'URL per tale ID cliente corrisponde a 'client_id' nel mio file' manifest.json'. Potresti voler fare una nuova domanda su SO e fornire maggiori dettagli e uno screenshot. Collegati qui e io controllerò. –

+0

Nah non me ne preoccuperò. È facoltativo ma altamente raccomandato. Questo è ancora abbastanza facoltativo per me. – Kerndog73

risposta

10

Codice-saggio, l'unica modifica necessaria è quella di attivare la modalità interattiva:

chrome.identity.getAuthToken({ 
    'interactive': true 
}, function(token) { 
    ... 
}); 

C'erano anche un paio di questioni PEBCAK in corso. Vale a dire:

  1. La pagina di autenticazione interattiva può richiedere alcuni secondi. Questo sembra essere un problema di larghezza di banda. Questo può essere parte del motivo per cui lo documentation suggerisce di attivare la richiesta di autorizzazione su alcuni tipi di interazione dell'utente e non quando l'estensione viene caricata per la prima volta.
  2. Lanciare interattivo tra false e true e ricaricare l'estensione non era un test sufficiente di funzionalità. Il risultato di getAuthToken è memorizzato nella cache. Quando revoco l'autenticazione e quindi aggiorno o addirittura eliminare e riaggiungere la mia estensione, lo stesso token continua a essere restituito per un certo periodo di tempo. Il riavvio di Chrome con la modalità interattiva abilitata è ciò che mi ha portato a questa soluzione.
+0

Grazie per la risposta. Sai come posso rimuovere le autorizzazioni che ho dato * inizialmente * all'estensione? Ora, anche se reinstallare l'estensione, non mi chiede il permesso (nel mio caso per gestire i file di Drive) e restituisce il token di accesso. Voglio che le estensioni mi chiedano di nuovo un permesso dopo averlo reinstallato. Ho anche provato a rimuovere token chached 'chrome.identity.removeCachedAuthToken ( {'token': token}, function() {})' ma sembra non correlato alle autorizzazioni e non ha aiutato. –

+1

@SergeyIvanov Grande domanda, ma probabilmente è meglio chiedersi come una nuova domanda su SO invece che in un commento. Se pubblichi una nuova domanda, in ogni caso, collegati qui! –

+0

Puoi trovare una domanda qui http://stackoverflow.com/q/30491789/2069858 –