1

Ich verwende chrome.identity.getAuthToken, um mit einigen internen API zu sprechen. Alles ist perfekt für die ersten 20 Stunden, ich kann die API anrufen und bekomme, was ich brauche.Chrome-Erweiterung Kein 'Access-Control-Allow-Origin'-Header nach 20 Stunden

Nach ~ 20 Stunden meine Verlängerung aufgehört zu arbeiten und ich bekomme:

Nein "Access-Control-Allow-Origin-Header auf die angeforderte Ressource vorhanden ist. Ursprung 'https://MY_API' ist daher nicht erlaubt.

Ich weiß, dass chrome.identity.getAuthToken abgelaufenen Token erneuern und ich kann bei chrome://identity-internals/, bekommt mein Code ein neues Zugriffstoken kann aber nicht die Anforderung senden, dass.

Wenn ich die Erweiterung erneut deinstalliere/installiere, funktioniert sie wieder.

Manifest enthält:

"permissions": [ "tabs", "activeTab", "cookies", "identity", "<all_urls>" ] 

Was passiert, wenn ich meine Erweiterung neu installieren, dass der Fehler weg gehen macht?

background.js:

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

     gapi.auth.setToken({'access_token': token}); 

     // Load the storage API. 
     gapi.client.load(API_ROOT + DISCOVERY_PATH, 
      VERSION, function() { 
      // Initialize GAPI's OAuth. 
      gapi.auth.init(function() { 
      var request = "It's request to my API"; 

      // Not working after 20 hours 
      request.execute(function(response) { 
      // do something 
      }); 

      }); 
     }); 
     }) 

auch versucht, "chrome.identity.removeCachedAuthToken" zu nennen, aber Erweiterung gestoppt in 20 Stunden zu arbeiten.

+0

Dies erfordert eine weitere wichtige Klarstellung. Wo siehst du diesen Fehler? Ist es in einem Inhaltsskript? Weil es sehr seltsam ist, dass Ihre API-URL das _origin_ ist. Bitte fügen Sie den Code (Maskierung der URL) ein, der diesen Fehler auslöst. – Xan

+0

Ich habe meinen ersten Beitrag aktualisiert – Julia

+0

Warum ... Warum verwenden Sie GAPI aller Dinge, um auf Ihre API zuzugreifen? – Xan

Antwort

0

auf dem Server "https://MY_API" diese Einstellungen festgelegt:

Header always append X-Frame-Options SAMEORIGIN 
Header add Access-Control-Allow-Origin "*" 

in .htaccess oder httpd.conf (wenn Server httpd/Apache)

+0

Das macht eine (große) Annahme, dass die API vom Erweiterungsentwickler kontrolliert wird. Das ist selten der Fall. – Xan

+0

Ich kann solche Änderungen nicht vornehmen. Ich kontrolliere das nicht. Vielen Dank! – Julia

0

Wenn Sie deinstallieren/neu installieren Sie die Erweiterung, sein interner Zustand ist komplett abgewischt; Dadurch erhält Ihr Code ein völlig neues Token, ein zuvor erhaltenes Token wird nicht aktualisiert.

Was Access-Control-Allow-Origin Header - das ist ein serverseitige Response-Header, und wir können nur vermuten, warum dies für einige zufällige API 3rd-Party ändert (die Sie nicht einmal Namen haben). Eine vernünftige Schätzung ist, dass Sie eine Rate-limiting oder Quote treffen, obwohl es sehr seltsam ist, CORS dafür zu verwenden.

Dieser insbesondere Fehler kann permanent von requesting cross-origin permissions beiseite gebürstet werden, wodurch Chrome CORS für Anforderungen aus der Erweiterung ignorieren (einschließlich Inhaltsskripts). Sie sollten jedoch die Verwendungsbedingungen der API ggf. überprüfen.

+1

Vielen Dank. Ich kann diesen API-Namen nicht mit dir teilen.Es ist etwas, das unser Unternehmen besitzt. Ich habe folgende Berechtigungen: "Berechtigungen": [ "Tabs", "ACTIVETAB", "Cookies", "Identität", "" ], Wie kann ich ganz frisch Token erhalten w/o neu installieren? Irgendeine Möglichkeit, das zu tun? – Julia

+0

Wenn es sich um eine eigene API handelt, sollten Sie dies als einen Fehler betrachten und untersuchen. – Xan

+0

Okay, das ist extrem interessant. Wenn Sie '" "' in Berechtigungen haben, kann keine Anfrage von Ihrer Erweiterung dies auslösen. Das bedeutet, dass das 'chrome.identity'-API selbst keinen ursprungsübergreifenden Berechtigungen unterliegt. Das ist seltsam. Möglicherweise ein Bug in Chrome. – Xan