2016-02-21 15 views
5

Sto provando a creare un'estensione di Chrome che cancella alcuni dettagli da Pull Requests su Github utilizzando l'API di recupero e quindi li visualizza altrove. Sto incontrando alcuni problemi quando cerco di usarlo con un repository non pubblico su Github. Credo che questo sia legato alla protezione CSRF e alle regole che regolano le estensioni di Chrome che hanno accesso ai cookie di sessione.L'API di recupero non invia cookie di sessione quando viene utilizzata all'interno di un'estensione di Chrome

Ho il seguente in del manifest.json mia estensione:

"content_scripts": [{ 
    "matches": [ 
     "*://github.com/*/*/pulls" 
    ], 
    "js": ["script/underscore-1.8.3.min.js", "script/content.js"] 
}], 
"permissions": [ 
    "tabs", 
    "activeTab", 
    "*://github.com/*", 
    "webNavigation" 
] 

Ma quando ho eseguito il seguente da dentro il mio script/content.js:

fetch('/redacted/redacted/pull/4549', {credentials: 'same-origin'}).then((response) => { 
    return response.text(); 
}).then((text) => { 
    // do cool stuff 
}) 

Questo produce una risposta 404 da Github. Ispezionando questa richiesta con la scheda di rete di Chrome Inspector, posso vedere che non sta inviando la mia intestazione di sessione GitHub con la richiesta.

Se faccio la stessa richiesta utilizzando il prompt di Javascript nell'Inspector, posso vedere una risposta di 200, e posso vedere che è è inviare i miei cookie di sessione.

La mia comprensione è stata che specificando il dominio Github nel mio manifest.json significherebbe che la mia estensione avrebbe accesso ai miei dati di sessione negli script di contenuto, non è corretto? Cosa dovrei fare per fare una richiesta valida a questo contenuto protetto?

+0

Ho anche questo problema, semplicemente non inviamo cookie anche con 'credenziali: 'same-origin'', mentre XHR semplicemente invia tutto, mi sembra un bug. – Daiwei

risposta

4

In base a Chrome blog, per includere i cookie è necessario credentials: 'include' anziché credentials: 'same-origin'.

+1

Durante l'utilizzo delle credenziali ': include'' è davvero la soluzione corretta, il post sul blog che citi non ti sostiene in alcun modo; non menziona nemmeno * estensioni di Chrome o 'credenziali: 'same-origin'' (che * è * un'opzione valida nel parametro' init' di una chiamata 'fetch()', ma semplicemente non funzionerà in il contesto di un'estensione di Chrome). La vera ragione per cui hai bisogno di 'credenziali: 'include'' è che le estensioni di Chrome vengono eseguite in una finestra fittizia il cui URL si trova nello schema' chrome-extension: // ', e quindi sicuramente non sulla * stessa origine * di qualsiasi dominio reale potresti voler fare una richiesta di recupero. –

-1

Specificare github nelle autorizzazioni consente solo l'accesso all'host, è lì per limitare i danni se l'estensione/app è compromessa dal malware (source).

Non è indicato nello content script documentation che i dati di sessione possono essere recuperati negli script di contenuto, solo i loro DOM. Penso che sarebbe meglio se tu usassi e incorporassi l'API Github ufficiale nel progetto di estensione chrome che stai creando.

Problemi correlati