ios oauth-2.0 bonjour google-oauth

Usando Google Oauth2 webflow desde iOS+Bonjour(¡Yikes!)



oauth-2.0 google-oauth (3)

Estoy construyendo una aplicación de iOS que requiere que el usuario autorice la API de Google a través de Oauth2 utilizando el flujo web del lado del servidor. Actualmente abro UIWebView para iniciar el flujo de oauth2.

Esto funciona bien en el simulador porque estoy configurando el URI de redirección para http://localhost y tengo un servidor ejecutándose en mi máquina local.

Sin embargo, me gustaría probar en el dispositivo mientras me estoy conectando a un servidor que se ejecuta en mi escritorio. Para hacer esto, he obtenido la aplicación para descubrir mi dirección de escritorio (una subred local de IP o una dirección bonjour como http://foo.local. ) para conectarme al servidor. Sin embargo, el flujo de Google Oauth2 dice que no puede usar los URI locales como una URL de redireccionamiento.

¿Hay alguna forma de evitar esto? Me gustaría no tener que meterme con la configuración de red local o las solicitudes de proxy desde mi dispositivo iOS si es posible. Idealmente, también me gustaría poder utilizar el servicio Bonjour para descubrir el servidor porque tenemos un equipo de desarrolladores y nuestra aplicación te permite elegir a qué servidor de la red local te gustaría conectarte.

Opciones?


¿Podrías probar este enfoque? Agregue lo siguiente a su /etc/hosts en su Mac OSX:

192.168.33.100 trialapp trialapp.com #put your local IP address instead of 192.168.33.100

Vaya a la configuración de la consola API de Google para su nueva ID de cliente y cambie la URL de redirección a http://trialapp.com/

  • "Tipo de aplicación: aplicación web".
  • A través de "Su sitio o nombre de host (más opciones)":

Lo que estamos haciendo es mapear su dirección IP de subred local a un nombre de dominio de alias. Entonces Google ya no debería pensar que esta es una dirección local. Ver si esto funciona?


Actualizado el 19/03/2013

Si el servidor es imprescindible tener intermediario, entonces recon la manera más fácil es tomar un nombre de dominio y hacer que el servidor se haga público. www.godaddy.com o cualquier proveedor de nombre de dominio obtendrá un nombre de dominio por aproximadamente $ 15 por año (sería menor si hay descuento).

Después de eso, solo busca cómo obtener un DNS dinámico y configura el redirect_uri como el nombre de dominio que se ha elegido.

De lo contrario, no vi el papel del servidor aquí si solo fuera por el propósito. Como segundo método enumerado a continuación, un dispositivo puede comunicarse directamente con el servidor de Google incluso detrás de un muro de fuego fuertemente defendido. (Se pasará el token, tira la barra de título).

Entonces podría necesitar alguna clarificación aquí.

¿Actuaría el servidor localhost como un concentrador para cambiar los archivos de la unidad de Google Drive y luego redistribuir a los dispositivos con iOS? ¿O qué tipo de arquitectura de red le gustaría lograr aquí?

==

Actualizado 18/03/2013

de acuerdo con el documento oficial https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi

Hay dos formas de oauth. usar localhost como redirigir es solo una forma.

otra es usar esta cadena

urn:ietf:wg:oauth:2.0:oob

para reemplazar la solicitud donde tiene un host local.

Por ejemplo, una solicitud previa con localhost de (nota: la diferencia está en la línea media que comienza con ''redirect_uri ='')

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile& redirect_uri=http://localhost:9004& response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

ahora se puede cambiar a

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile& redirect_uri=urn:ietf:wg:oauth:2.0:oob& response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

así que acceder a la url de la anterior en el simulador debería ser equivalente a acceder a la última en el dispositivo real.

aureola


Terminé resolviendo esto tomando el siguiente enfoque.

En mi UIWebView, intercepté todas las solicitudes de carga y modifiqué las URL. Básicamente, establecí el redirect_uri en algo público (que también está registrado en la consola api), pero cuando UIWebView intenta cargar ese URI de redirección (después de varios redireccionamientos), reescribo esa URL para señalar una devolución de llamada en mi mac en la red local.

Obviamente, esto debe tenerse en cuenta al analizar el token en el lado del servidor.