2012-06-02 8 views
5

Tenemos una distribución empresarial de una aplicación que nos gustaría distribuir solo dentro de nuestra organización.¿Cómo asegurar la distribución empresarial de iOS utilizando oauth en un sitio web público?

Hemos creado el archivo ipa y el plist que apunta a los lugares correctos, y creamos la página html con la url: itms-services: //? Action = download & url = {link to our plist}.

Nuestro problema, sin embargo, es asegurar el proceso de distribución. Queremos que nuestros empleados con iPads de propiedad de la compañía puedan descargar la aplicación mientras se desplazan (son muy móviles). Por lo tanto, queremos ubicar el plist y la aplicación en un sitio web público que requiere iniciar sesión a través de un servicio oauth.

Nuestro problema es que si requerimos autenticación en las URL para la aplicación y el plist, itms-services: // url ya no funciona. Lo que sucede es que el usuario hace clic en el enlace de servicios de itms y vemos una solicitud no autenticada para el plist (que se redirige para iniciar sesión) seguido de un "No se puede conectar a {hostname}" en el dispositivo.

Por el momento, la única forma en que puedo ver que esto funciona es si los archivos ipa y plist no se comprueban para la autenticación. Esto significa (creo) que alguien que adivine nuestras URL a nuestro archivo plist podría crear su propio enlace de servicios de itms y descargar la aplicación sin autorización y hacer que efectivamente violemos nuestro acuerdo con Apple para distribuirlo solo a nuestros empleados.

Mi pregunta por lo tanto es: ¿cómo puedo crear un enlace de servicios de itms que no exponga los archivos ipa y plist al público? Si es relevante, el sitio web se crea usando nodejs y la aplicación es una aplicación PhoneGap.

Respuesta

7

He encontrado una solución a esto.

No podemos usar la autenticación oauth porque el proceso de instalación de iOS no presenta la oportunidad de ingresar credenciales.

En cambio, cuando el usuario solicita la página en la que mostramos los servicios itms: // link on, creamos una cadena única para ese usuario y la encriptamos usando AES-256, luego la almacenamos en la base de datos.

Nuestra URL se convierte en: itms-services://{url to plist}/{encryptedString}. Intentamos usar una cadena de consulta, pero parece que la herramienta de instalación de iOS no la transmite.

Cuando la herramienta de instalación solicita el Plist, verificamos la cadena cifrada en la base de datos, abrimos el plist y reescribimos la url en el archivo ipa al {url to ipa}/{encryptedString}.

Esto parece funcionar bastante bien. El único problema que se me ocurre en este momento es que la URL se puede compartir públicamente como un usuario legítimo con alguien que no debería tener acceso. Creo que podríamos evitar esto asegurándonos de que la URL sea sensible al tiempo (por ejemplo, solo disponible durante 5 minutos).

Finalmente, cualquier solicitud al plist o al ipa sin una cadena encriptada correcta será rechazada.

¡Espero que sea útil para alguien!

+3

Así que es como ... casi una solución. Creo que este es un problema serio con el protocolo itms-services: //. Definitivamente debería ser compatible con la autenticación. – xdumaine

Cuestiones relacionadas