2013-11-27 5 views
5

Ich habe andere Fragen zu SO (here, here und here) gesehen, aber ich bin mit keiner der Lösungen zufrieden, also frage ich es noch einmal. Ich starte eine Webanwendung, die OAuth von mehreren Anbietern (Google, Facebook, Twitter, Yahoo) zur Authentifizierung nutzt. Ich habe Schwierigkeiten, eine Konfiguration zu finden, die sowohl für eine lokale Entwicklungsumgebung als auch für eine Produktionsumgebung geeignet ist.Verwenden von OAuth für Entwicklungs- und Produktionsumgebungen

Die führenden Lösungen, die ich gefunden habe, sind mehrere Anwendungen innerhalb der einzelnen Anbieter registrieren, einen anderen Consumer-Key und Geheimnis für jede Aufnahme:

„My App Production“ - mit einem Rückruf URI http://www.myapp.com/callback

„My App-Entwicklung“ - mit einem Rückruf URI http://local.myapp.com/callback

einen Eintrag in Ihrem lokalen Host-Datei hinzufügen local.myapp.com-127.0.0.1 und s-zu-Punkt ome Konfiguration für Ihre Anwendung, die richtigen Verbraucher Schlüssel basierend auf der Umgebung zu verwenden, und Sie sind gut zu gehen, nicht wahr?

Aber meine Anwendung ist responsive und ich muss meine Entwicklungsumgebung testen, die auf meinem PC von mehreren anderen Geräten wie meinem iPhone und iPad läuft, von denen keiner in der Lage sein wird, den Entwicklungsrückruf-URI zu lösen.

Nehmen wir an, ich habe bereits einen DNS-Server in meinem Netzwerk und bin in der Lage, den Eintrag für local.myapp.com anstelle meiner lokalen Hosts-Datei hinzuzufügen und kann jetzt von jedem Gerät im Netzwerk auf meine Entwicklungsinstanz zugreifen.

Aber mein Entwicklungsteam arbeitet alle im selben lokalen Netzwerk. Jetzt zeigt local.myapp.com auf die gleiche IP für alle. Lassen Sie uns zurückgehen, um die hosts-Datei auf dem Computer jedes Entwicklers so einzustellen, dass sie alle unabhängig von ihrer Workstation arbeiten können. Jetzt kann niemand mehr seine Entwicklungsinstanz von ihrem iPhone aus testen. Es scheint kaum die richtige Antwort für jeden Entwickler zu sein, eine Anwendung beim Provider zu registrieren, nur damit sie einen eindeutigen Callback-URI angeben können.

Normalerweise, wenn ich im Unkraut mit einer komplizierten Lösung für ein scheinbar einfaches Problem nach unten gehe, bedeutet es normalerweise, dass ich etwas grundsätzlich falsch mache. Fehle ich etwas an OAuth, soll es nicht so benutzt werden? Ich bin versucht, OAuth insgesamt zu verwerfen und einfach mit OpenID zu gehen (keine App-Registrierung erforderlich und kann den Callback-URI innerhalb der App angeben), aber dann verliere ich zwei der großen Jungs in Facebook und Twitter. Ich brauche wirklich keine der Daten des Benutzers, es ist nur ein nettes zu haben, wenn es verfügbar ist. Kann mich jemand zurück in OAuth sprechen?

+0

nur zum testen richtig? Warum sollte nicht jede Web-App ein virtuelles Verzeichnis sein? – codemonkeh

+0

Ich folge nicht wirklich, was Sie bekommen. Kannst du es ausarbeiten? – schmimd04

+0

Haben Sie jemals eine Lösung gefunden? Ich kämpfe mit genau der gleichen Sache; Die oauth-Anbieter erlauben keine Wildcards im Ursprung, also kann ich nicht "alice.dev.myapp.com" und "bob.dev.myapp.com" haben, aber wenn alle Entwickler 'dev.myapp.com' teilen, dann tue ich es nicht Ich weiß nicht, wie man die Tablets und Telefone auf den richtigen Entwickler richtet. Das Erstellen eines OAuth-Einstiegspunkts pro Entwickler scheint der einzige Weg zu sein. – mczepiel

Antwort

0

Ich gab folgende Antwort zu einer Rails-Anwendung Ich schrieb:

OAuth2 in development and production

Es war ein Juwel namens figaro, die für Google OAuth2 pro env configs tat.

+0

Das sieht nur aus wie ein schickes Tool zum Verwalten von Eigenschaftendateien. Was ist mit dem Testen meiner Anwendung auf meinem PC von meinem iPhone aus, wenn der OAuth-Rückruf an local.myapp.com geht? – schmimd04

0

Ich kann nicht für FB oder Twitter sprechen, aber in der Oauth-Implementierung von Google können Sie mehrere OAUTH-Callback-URLs registrieren. Sie benötigen also lediglich eine Logik in Ihrer App, die erkennt, dass sie sich im Testmodus befindet, und startet dann den Oauth-Fluss mit der entsprechenden Rückruf-URL. Es gibt Nachteile, zB Zusammenstöße zwischen den Live- und den Test-Refresh-Token, aber sie sind überschaubar.

In meiner App habe ich einen Singleton, der das alles verwaltet.Wenn meine App einen Oauth-Fluss starten muss, ruft sie den Singleton mit der Anforderungs-URL und allen anderen hervorstechenden Daten auf (z. B. debug flag) und der Singleton gibt die korrekte Callback-URL, Client-ID usw. zurück

+0

Sicher, ich kann mit der Logik umgehen, um zu wissen, ob es Produktion oder Entwicklung ist und den richtigen Consumer Key/Secret verwenden. Aber was ist mit Testen von meinem iPhone in Dev mit einem Callback-URI, dass mein iPhone nicht auflösen kann? Ich muss von mobilen Geräten in der Entwicklung testen. – schmimd04

+0

Das ist also ein DNS-Problem? Verwenden Sie etwas wie AWS Route 55 und registrieren Sie Ihren Dev-Server dort, damit er öffentlich aufgelöst wird. Kann das iPhone für die Verwendung eines Proxy-Servers konfiguriert werden? Wenn ja, könnten Sie Ihr Problem auch mit einigen Proxy-Routing-Regeln lösen. Wenn es hilft, richte ich gerne einen Dev-Server als Subdomain in einer der von mir verwalteten Domains ein. – pinoyyid

0

Ich muss noch finden ein weniger manuelle Ansatz, der Entwickler Zugriff auf alle betroffenen Geräte ermöglicht:

  1. Ordnen sie jedem Entwickler-Maschine eine feste IP über das lokale Netzwerk des DHCP-System auf der Basis ihrer MAC-Adresse oder (weniger empfohlen) haben sie wählen eine IP und Hoffnung für die besten
  2. (optional *) Weisen Sie jedem Computer des Entwicklers einen DNS-Hostnamen im lokalen Netzwerk zu, basierend auf der IP-Adresse
  3. Registrieren Sie einen OAUTH-Eintrag für Entwickler bei jedem Anbieter mit dem Hostnamen des Entwicklers.
  4. Jeder Entwickler konfiguriert seine Anwendung so, dass sie ihre eigenen OA-Dev-Tokens verwenden.

Unter der Annahme, alle Geräte im Netzwerk auf die gleichen DHCP und DNS-Server werden Sie dann in der Lage sein alice.dev.myapp.com oder bob.dev.myapp.com von jedem Gerät im Netzwerk zu besuchen.

Beachten Sie, dass Sie die OAUTH-Konfiguration für jede andere Umgebung separat verwalten, jedoch nach demselben Ansatz.

Es gibt wahrscheinlich Tools, um die Registrierung der IP- und Hostnamen eines Entwicklers zu automatisieren, um diesen Teil des Puzzles zu vereinfachen. Es ist der mühsamste Schritt, die oauth-Konfiguration für jeden Provider per Entwickler zu registrieren.

UPDATE

* Sie den DNS-Teil überspringen können, wenn Sie ein xip.io url verwenden z.B. 10.0.0.123.xip.io Wenn Sie wissen, dass es sich bei 10.0.0.123 um Alice handelt, möchten Sie dennoch, dass diese IP repariert wird, da Sie die URL für die oauth-Token in Schritt 4 nicht weiter aktualisieren möchten.