Chrome-Identität launchWebAuthFlow öffnet nur eine leere Callback-Seite

8

Sorry für noch eine weitere Frage, normalerweise gebe ich nicht nach, bis ich selbst eine Lösung gefunden habe, aber diese bringt mich drei Tage lang und es ist Zeit zuzugeben, dass ich feststecke ...

Ich versuche, eine Chrome-Erweiterung für die Verwendung von PushBullet-Benutzerdaten über OAuth2 zu authentifizieren:

background.js

%Vor%

manifest.json:

%Vor%

Wenn ich die Erweiterung lade:

  1. Das Pushbullet-Autorisierungs-Popup öffnet sich und fragt nach der Erlaubnis für meine Erweiterung (OK)
  2. Ich stimme zu (OK)
  3. Das Pushbullet-Fenster wird geschlossen und eine neue leere Seite zeigt die URL von Dieses Fenster ist der Rückruf-URI mit einem Token:
  

chrome-extension: //lgekckejcpodobwpelekldnhcbenimbe/oauth2#access_token=o.zrrWrDozxMu6kftrMHb89siYJQhRVcoL

Ich habe nicht damit gerechnet, dass eine leere Seite geöffnet wird, sondern launchWebAuthFlow hat den URI erfasst und in das Konsolenprotokoll geschrieben, wie in der Callback-Funktion codiert ... aber es scheint zu warten ...

Die einzige Option ist jetzt, diese leere Seite zu schließen, um nur Folgendes zu sehen:

  

Unchecked runtime.lastError beim Ausführen von identity.launchWebAuthFlow: Der Benutzer hat den Zugriff nicht genehmigt.

Offensichtlich fehlt mir etwas Vitales ... brauche ich zusätzlichen Code "irgendwo", um den Callback-URI in meinem background.js zu erhalten?

Danke, wirklich die Hilfe zu schätzen.

Schattenhunter

    
ShadowHunter 03.06.2015, 06:11
quelle

2 Antworten

12

Sie missverstehen das identity API .

Sie können es nicht mit einer benutzerdefinierten Rückruf-URL verwenden. Die API erwartet, dass Sie eine URL des Formulars

verwenden %Vor%

, die Sie mit einem Aufruf von chrome.identity.getRedirectURL(path)

erhalten können
  

Wenn der Anbieter zu einer URL umleitet, die dem Muster https://<app-id>.chromiumapp.org/* entspricht, wird das Fenster geschlossen und die endgültige Weiterleitungs-URL wird an die Rückruffunktion übergeben.

Dies liegt daran, dass viele OAuth-Anbieter eine chrome-extension:// URL nicht als gültig akzeptieren.

Wenn Sie das tun - großartig, aber Sie müssen Ihre eigene OAuth-Bibliothek verwenden (und den Token-Speicher, der schlechter ist). chrome.identity funktioniert nur mit dem obigen.

Beachten Sie, dass die Netzwerkanforderung nicht wirklich an die chromiumapp.org -Adresse in diesem Fluss gesendet wird - es ist eine "virtuelle" Adresse, die von der API abgefangen wird.

    
Xan 03.06.2015, 07:32
quelle
7

Eine schnelle Elaboration über die Lösung für alle anderen, die damit zu kämpfen haben:

Dies ist der Arbeitscode:

background.js

%Vor%

manifest.js

%Vor%

Nochmals vielen Dank Xan und einen schönen Tag.

Mit freundlichen Grüßen

Schattenhunter

    
ShadowHunter 03.06.2015 08:04
quelle