2013-11-27 12 views
5

Ho visto altre domande su SO su questo (here, here e here), ma non sono soddisfatto di nessuna delle soluzioni, quindi lo chiedo nuovamente. Sto avviando un'applicazione web che utilizzerà OAuth da più provider (Google, Facebook, Twitter, Yahoo) per l'autenticazione. Sto facendo fatica a trovare una configurazione adatta per l'uso sia per un ambiente di sviluppo locale che per un ambiente di produzione.Utilizzo di OAuth per entrambi gli ambienti di sviluppo e produzione

Le soluzioni principali che ho trovato sono da registrare più applicazioni all'interno di ogni fornitore, che riceve una chiave diversa consumatori e segreto per ciascuna:

"My App Production" - con un callback URI per http://www.myapp.com/callback

"My App per lo sviluppo" - con un callback URI per http://local.myapp.com/callback

Aggiungi una voce per i padroni di casa file locale per puntare local.myapp.com-127.0.0.1 e s ome configurazione per l'applicazione per utilizzare le chiavi del consumatore corretto in base all'ambiente, e sei a posto, giusto?

Ma la mia applicazione è responsive e ho bisogno di testare il mio ambiente di sviluppo in esecuzione sul mio PC da più altri dispositivi, come il mio iPhone e iPad, nessuno dei quali sarà in grado di risolvere l'URI di callback dello sviluppo.

Diciamo che ho già un server DNS sulla mia rete e sono in grado di aggiungere la voce per local.myapp.com invece del mio file di host locale e ora posso accedere alla mia istanza di sviluppo da qualsiasi dispositivo sulla rete.

Ma il mio team di sviluppo funziona tutti sulla stessa rete locale. Ora lo local.myapp.com punta allo stesso IP per tutti. Torniamo all'impostazione del file hosts sul computer di ogni sviluppatore in modo che tutti possano lavorare indipendentemente dalla loro stazione di lavoro. Ora nessuno può testare di nuovo l'istanza di sviluppo dal proprio iPhone. Difficilmente sembra la risposta giusta per ogni sviluppatore per registrare un'applicazione con il provider solo in modo che possano specificare un URI di callback univoco.

Normalmente quando scendo tra le erbacce con una soluzione complicata per un problema apparentemente semplice, di solito significa che sto facendo qualcosa di fondamentalmente sbagliato. Mi manca qualcosa su OAuth, non è destinato ad essere usato in questo modo? Sono tentato di svuotare OAuth del tutto e basta andare con OpenID (non è richiesta la registrazione dell'app e posso specificare l'URI di callback dall'interno dell'app), ma poi perdo due dei grandi battitori su Facebook e Twitter. Non ho davvero bisogno di nessuno dei dati dell'utente, è solo un piacere avere se è disponibile. Qualcuno può parlarmi di OAuth?

+0

È solo per testare giusto? Perché non ogni app Web è una directory virtuale? – codemonkeh

+0

Non seguo veramente quello che stai ricevendo. Puoi elaborare? – schmimd04

+0

Hai mai trovato una soluzione? Sto lottando con la stessa identica cosa; i fornitori di oauth non consentono i caratteri jolly nell'origine, quindi non posso avere "alice.dev.myapp.com" e "bob.dev.myapp.com" ma se tutti gli sviluppatori condividono 'dev.myapp.com' So come indirizzare tablet e telefoni allo sviluppatore corretto. Creare un punto di accesso oauth per sviluppatore sembra essere l'unico modo. – mczepiel

risposta

0

ho postato il seguente risposta di un'applicazione Rails ho scritto:

OAuth2 in development and production

Era un gioiello chiamato Figaro che ha fatto per configurazioni env per Google OAuth2.

+0

Sembra proprio uno strumento elegante per la gestione dei file delle proprietà. Che ne pensi di testare la mia applicazione in esecuzione sul mio PC dal mio iPhone quando il callback OAuth va su local.myapp.com? – schmimd04

0

Non riesco a parlare per FB o Twitter, ma nell'implementazione di Google Oauth è possibile registrare diversi URL di callback oauth. Quindi hai semplicemente bisogno di un po 'di logica nella tua app che rileva che è in modalità test, quindi avvia il flusso Oauth con l'URL di richiamata appropriato. Ci sono aspetti negativi, ad esempio, scontri tra i token di aggiornamento live e test, ma sono gestibili.

Nella mia app ho un singleton che gestisce tutto questo.Quando la mia app ha bisogno di avviare un flusso Oauth chiama il singleton con l'URL di richiesta e qualsiasi altro dato saliente (ad esempio il debug flag) e il singleton restituisce l'URL di callback corretto, l'ID client ecc.

+0

Certo, posso gestire la logica per sapere se si tratta di produzione o sviluppo e utilizzare la chiave del consumatore/segreto giusto. Ma che dire dei test dal mio iPhone in dev con un callback uri che il mio iPhone non può risolvere? Devo testare dai dispositivi mobili in fase di sviluppo. – schmimd04

+0

Quindi questo è un problema DNS? Usa qualcosa come AWS Route 55 e registra lì il tuo server di sviluppo in modo che si risolva pubblicamente. IPhone può essere configurato per utilizzare un server proxy? In tal caso, potresti anche risolvere il tuo problema con alcune regole di routing proxy. Se aiuta, creerò felicemente un server di sviluppo come sottodominio su uno dei domini che gestisco. – pinoyyid

0

Devo ancora trovare un approccio meno manuale che consente l'accesso dev a tutti i dispositivi in ​​questione:

  1. Assegnare macchina di ogni sviluppatore un IP fisso attraverso il sistema DHCP della rete locale, in base al loro indirizzo MAC, o (meno consigliato) li hanno scegliere un IP e di speranza per il migliore
  2. (facoltativo *) Assegna a ciascun sviluppatore un nome host DNS nella rete locale basato su tale IP
  3. Registrare una voce oauth per sviluppatore su ciascun provider con il nome host della macchina dello sviluppatore.
  4. Ogni sviluppatore configura la propria applicazione per utilizzare i propri token oauth dev unici.

Supponendo tutti i dispositivi della rete si basano sugli stessi server DHCP e DNS sarete quindi in grado di visitare alice.dev.myapp.com o bob.dev.myapp.com da qualsiasi dispositivo in rete.

Nota, gestirai la configurazione oauth per ognuno e per ogni altro ambiente separatamente, ma seguendo lo stesso approccio.

Esistono probabilmente strumenti per automatizzare la registrazione dell'IP del computer dello sviluppatore e del nome host per facilitare questa parte del puzzle. Registrare la configurazione di oauth su ciascun provider per dev è il passo più noioso.

UPDATE

* È possibile saltare la parte DNS se si utilizza un xip.io url esempio 10.0.0.123.xip.io se si conosce che Alice è 10.0.0.123, ma si desidera comunque che l'IP venga corretto in quanto non si desidera continuare a aggiornare l'URL per i token oauth nel passaggio 4.

Problemi correlati