2013-02-17 8 views
5

Wie würde ich mich mit Firebase in einer Chrome-Erweiterung authentifizieren? Ich muss die erlaubte Domain-Liste in der Schmiede angeben. Die Chrome-Domain für die Erweiterung ist nur eine große Hash-ähnliche Zeichenfolge.Firebase-Authentifizierung in einer Chrome-Erweiterung Hintergrundseite

ich das las: authClient.login problems

Aber die Hash-Domäne einer Chrome-Erweiterung ist in der Schmiede nicht Firebase akzeptiert. Gibt es einen anderen Weg, dies zu tun? Momentan lese ich gerade den Cookie firebaseSessionKey, um einfach davon auszugehen, dass ich eingeloggt bin. Aber das kann sicher nicht so sicher sein, wie Firebase diesen Sitzungsschlüssel validieren zu lassen.

+0

Ingenieur bei Firebase hier. Da Chrome-Erweiterungen eine umfassendere Änderung von HTTP-Anforderungen ermöglichen, ist es möglicherweise nicht die sichere Lösung, einen anderen Referrer zu konfigurieren. Wenn Sie eine Chance haben, würde ich gerne etwas mehr über Ihren Anwendungsfall erfahren und welche Art von Authentifizierung Sie in Ihrer Erweiterung verwenden möchten - senden Sie mir eine E-Mail an [email protected] –

+0

Werde dir Leute darüber schreiben. Ich habe ein langes Blatt Notizen, die ich gemacht habe, während ich daran gearbeitet habe. Gegenwärtig hat das System Code für 3 verschiedene Plattformen und wird sich auf ungefähr 12 Plattformen erstrecken. Ich denke, ihr findet es vielleicht interessant. –

Antwort

8

Wie Rob darauf hinweist, kann die Authentifizierung in einer Umgebung, die keine Ursprungsbeschränkungen durchsetzt, nicht funktionieren. Das grundlegende Problem hierbei ist, dass jeder Authentifizierungsanbieter (Facebook, Twitter, Persona oder Ihr eigener Dienst) keine Identität für einen Browser ausgeben kann - das heißt, es ist bedeutungslos, Facebook zu verwenden, um sich bei Ihrem Browser (oder Ihrer Erweiterung) anzumelden.

Das F1-Add-on für Firefox stieß auf ein ähnliches Problem (http://f1.mozillamessaging.com/) - wo Sie F1 autorisieren würden, in Ihrem Namen auf Twitter/Facebook zu posten. Die Erweiterung hatte eine dazugehörige Website, von wo aus Sie die Anmeldeseite bedienen und wie gewohnt auf einer Webseite fortfahren würden. Sie benötigen Code, um zwischen der Webseite und Ihrer Erweiterung zu kommunizieren, Chrome stellt die notwendigen Tools zur Verfügung.

Ich würde den gleichen Ansatz empfehlen - erstellen Sie eine Webseite auf einer echten Domain (Github-Seiten ist toll dafür), um mit Ihrer Erweiterung zu gehen. Das bedeutet, dass Ihre Erweiterung nicht offline arbeiten kann, aber weder Ihre Anmeldung noch Ihr Schreiben an Firebase!

+0

Ich habe eine Website mit einem Dashboard, wo man sich einloggen und den Account mit einigen Einstellungen verwalten kann, die direkt mit Firebase verlinkt sind (so spiegeln sich sogar die Einstellungen überall!). Dies ist schließlich, was ich tun möchte, um sicherzustellen, dass Chrome-Erweiterung in der Lage ist, zumindest in einer autorisierten Umgebung zu arbeiten. Wie ich in meinem Kommentar zu Rob geschrieben habe, möchte ich, dass dies auf verschiedenen Plattformen funktioniert. –

+0

@Anant, welche Art von Informationen muss die Webseite an die Erweiterung weitergeben? Nach der Anmeldung hat die Benutzervariable das Benutzerobjekt, aber selbst wenn wir es an die Erweiterung weitergeben Firebase denkt immer noch, dass der Benutzer nicht angemeldet ist. – abinop

+2

Hey @abinop, Sie müssen das Firebase-Authentifizierungstoken von der Webseite zurückgeben zur Erweiterung. Sie können auf diese über user.firebaseAuthToken zugreifen und dann fireBaseRef.auth (token) verwenden, um sich als dieser Benutzer anzumelden. – Anant

1

Dies funktioniert mit dem Google Plus-Login-Flow, der meiner Meinung nach der einzige ist, der die Cross-Authentifizierung ermöglicht, so dass die Bereiche Google Plus Login sind.

„www [dot] googleapis [dot] com/Auth/plus.login“

Also, was hier passiert ist, ist, dass Sie die access_token von der Verlängerung erhalten, die Sie mit der Bitte an Feuerbasis zu senden verwenden werden authwihtoauthtoken spezifiziert google als Provider zusammen mit dem access_token von chrome.identity.getAuthToken()!

https://www.firebase.com/docs/web/api/firebase/authwithoauthtoken.html

Jetzt ist die Tatsache, dass dieses Zugriffstoken durch eine andere App ausgegeben werden können, so müssen wir sicherstellen, dass es gültig ist, und ist für unsere App ausgestellt wurde, im Grunde müssen wir dort isn wissen 't Mann in der Mitte versucht, auf unsere Datenbank zuzugreifen.

Diese Überprüfung wird von der Firebase vorgenommen.

Sie prüfen, ob dieser Token zu derselben Anwendung gehört, für die der Token ausgestellt wurde.

Sie müssen also einen anderen Satz von Anmeldeinformationen unter der gleichen Anwendung in der Google Developers Console wie für Ihre Erweiterung erstellen. Wir werden im Prinzip dasselbe tun, als ob wir es für unsere Webseite tun würden, aber wir werden diese neuen Anmeldeinformationen in die Sicherheitsabteilung von Firebase goal oAuth einfügen.

Sie werden diese Überprüfung für uns dort tun. Sie überprüfen mit Google, ob das Token an dieselbe App gesendet wird.

Das ist es.

Hintergrundinformationen.

https://developers.google.com/identity/protocols/OAuth2UserAgent#validatetoken

Use Case

mit Anfragen senden ID-Token, die authentifiziert werden müssen. Wenn Sie beispielsweise Daten an Ihren Server senden müssen und sicherstellen möchten, dass bestimmte Daten von einem bestimmten Benutzer stammen.

Wann der Zugriff zu überprüfen ist Alle Token müssen auf Ihrem Server verifiziert werden, es sei denn, Sie wissen, dass sie direkt von Google stammen. Alle Token, die Sie von Ihren Client-Apps erhalten, müssen überprüft werden.

Google hat ein Tutorial, wie dies bei gefunden für Python tun:

"Github [dot] com/google/GPlus-verifytoken-Python"

Also im Grunde, was hier passiert ist; Anstatt dies auf Ihrem Server zu tun, führt Firebase diese Überprüfung für Sie durch, wenn Sie die CLIENT_ID und APP_SECRET in die Firebase eingeben und die Google-Authentifizierung aktivieren.

Der Weg, dies richtig zu tun, ist eine Kombination oder der gleiche Stil der Überprüfung, wem die client_secret ausgestellt wurde. Chrome wird dir ein access_token geben und dann wird dieses access_token im Backend der Firebase überprüft.

+0

Vielen Dank für die Antwort auf diese! Es ist eine Weile her, aber ich werde etwas davon ausprobieren und zurückkommen. :) –

Verwandte Themen