Ich arbeite an einer Erweiterung, die mit Facebook verbunden werden muss, um einige Benutzerdaten herunterzuladen. Ich bin den Details des OAuth-Tanzes etwas unbekannt und konnte dies nicht mit der gewünschten Sicherheit umsetzen. Im aktuellen Setup (das funktioniert) mache ich mir Sorgen um Übeltäter, die den Namen meiner Anwendung kapern und damit Spam verschicken.Der korrekte Weg zu OAuth von einem Desktop-Client ohne einen Server
Ich habe viele verschiedene Techniken versucht, um OAuth (Login mit Facebook im Besonderen) in meiner Erweiterung zu implementieren. Das aktuelle Setup verwendet Facebook's Manual Login flow.
- Öffnen Sie das OAuth-Popupfenster in der Sandbox-Registerkarte.
- Setzen Sie redirect_url auf "special", internal facebook page, für die keine konfigurierten Weiterleitungs-URLs erforderlich sind. Legen Sie den Parameter auth_token so fest, dass ein auth_token und kein temporärer Code zurückgegeben wird.
- Injizieren Sie Javascript in die spezielle Weiterleitungsseite, die eine Nachricht an die Erweiterung mit dem auth_token sendet.
Dies funktioniert wie erwartet. Ich bin in der Lage, Benutzer auth_token zu erhalten, nachdem sie meiner App Erlaubnis per Popup gegeben haben.
Ich bin besorgt über die Sicherheit, da die Erweiterung keinen Server zum Speichern eines geheimen Schlüssels hat, noch eine gültige Domäne hat, um redirect_urls zu begrenzen und die Authentizität von Autorisierungsanfragen zu überprüfen. Aufgrund dieses Flusses: Ein Hacker könnte einfach die Quelle auf meine Erweiterung herunterladen, die Facebook App ID stehlen, Popup-Fenster für meine App von ihren eigenen Websites generieren und auth_tokens erhalten, die im Auftrag "via" meine Anwendung posten können.
Noch viel mehr, die official Google Chrome gudie to OAuth in Extensions empfiehlt die Einbettung Ihrer consumer_secret in die Erweiterung. Dies scheint kontraintuitiv zu sein.
Ich bin recht zuversichtlich, dies auf zwei Arten gelöst werden kann:
- meinen eigenen Server erstellen, die zwischen meiner Erweiterung und Facebook als Proxy fungiert. Ich könnte die redirect_url auf meine benutzerdefinierte Domain setzen, consumer_secret auf meinem Server speichern und eine enge API zwischen dem Client und meinem eigenen Server definieren.
- Beschränken Sie die Autorisierungsumleitung auf meine Chrome-Erweiterungs-ID (ungefähr so, wie das Facebook iOS SDK App-Store-Paket-IDs verwendet). Leider kann ich meine Facebook-App nicht mit einer Chrome-Erweiterungs-ID verknüpfen. Es heißt "ungültige URL".
Ich würde die zweite Option bevorzugen, da das Ausführen eines Servers teuer sein kann und einen weiteren Fehlerpunkt für die Erweiterung darstellt. Benutzer müssen sich auch mit "Black Box" -Code beschäftigen, der ihre auth_tokens hält, was saugt.
Interessanterweise scheint Facebook eine Ausnahme für ms-app: // URLs (Windows 8-Anwendungen) zu machen. Warum nicht Chrome-Erweiterung: // URLs?
Also meine Frage: - Ist das möglich? Fehle ich etwas? Zweitens: Werde ich wegen dieser Art von Hijacking-Angriff paranoid? Es scheint ziemlich gutartig zu sein, aber ich möchte Hackern nicht erlauben, den OAuth-Dialog meiner App zu übernehmen.
Danke
Ich wette, die * Hacker * wissen nichts davon: http://seclab.web.cs.illinois.edu/wp-content/uploads/2011/03/BoyerHOBGR07.pdf –