5

Ich versuche eine Chrome-Erweiterung zu erstellen, die einige Details aus Pull-Anforderungen auf Github mithilfe der Fetch-API löscht und dann an anderer Stelle anzeigt. Ich stoße auf einige Probleme, wenn ich versuche, dies mit einem nicht öffentlichen Repository auf Github zu verwenden. Ich glaube, dass dies mit dem CSRF-Schutz zusammenhängt und dass die Regeln für Chrome-Erweiterungen Zugriff auf Sitzungscookies haben.Abruf-API sendet keine Sitzungscookies, wenn sie in einer Chrome-Erweiterung verwendet wird

Ich habe folgendes in meiner Erweiterung der manifest.json:

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

Aber wenn ich laufe folgendes aus: In meinem script/content.js:

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

Dies erzeugt eine 404-Antwort von Github. Wenn ich diese Anfrage über die Netzwerkregisterkarte von Chrome Inspector überprüfe, kann ich feststellen, dass meine GitHub-Sitzungs-Kopfzeile nicht mit der Anfrage gesendet wird.

Wenn ich die gleiche Anforderung mit der Javascript-Eingabeaufforderung im Inspector mache, kann ich eine 200-Antwort sehen, und ich kann sehen, dass es ist meine Session-Cookies zu senden.

Mein Verständnis war, dass die Angabe der Github-Domain in meinem manifest.json bedeuten würde, dass meine Erweiterung Zugriff auf meine Sitzungsdaten in meinen Inhaltsskripten hätte, ist das nicht korrekt? Was muss ich tun, um eine gültige Anfrage an diesen geschützten Inhalt zu stellen?

+0

Ich habe dieses Problem auch, fetch einfach nicht senden Cookies auch mit 'credentials: 'same-Herkunft'', während XHR einfach alles senden, scheint wie ein Fehler für mich. – Daiwei

Antwort

4

Nach Chrome blog, um Cookies aufzunehmen, benötigen Sie credentials: 'include' anstelle von credentials: 'same-origin'.

+1

Während die Verwendung von 'credentials: 'include'' in der Tat die richtige Lösung ist, unterstützt der Blog-Post, den du zitierst, in keiner Weise. Es erwähnt nicht einmal * Chrome-Erweiterungen oder 'credentials: 'same-origin' (was * eine * gültige Option im' init'-Parameter eines Aufrufs 'fetch()' ist, aber einfach nicht funktioniert der Kontext einer Chrome-Erweiterung). Der eigentliche Grund, warum Sie "credentials:" include'' brauchen, ist, dass Chrome-Erweiterungen in einem fiktiven Fenster ausgeführt werden, dessen URL auf dem 'chrome-extension: //' Schema liegt und daher definitiv nicht auf dem gleichen Ursprung * wie eine echte Domain Möglicherweise möchten Sie eine Abrufanforderung an. –

-1

Angeben von Github in den Berechtigungen gibt nur Zugriff auf den Host, seine dort Schaden zu begrenzen, wenn die Erweiterung/app durch Malware gefährdet ist (source).

Es ist nicht in der content script documentation angezeigt, dass Sitzungsdaten in Inhaltsskripten abgerufen werden können, nur ihre DOMs. Ich denke, es wäre besser, wenn Sie die offizielle Github-API in dem von Ihnen erstellten Chrome-Erweiterungsprojekt verwenden und einbinden.