2012-06-02 15 views
5

Abbiamo una distribuzione aziendale di un'app che vorremmo distribuire solo all'interno della nostra organizzazione.Come proteggere la distribuzione aziendale iOS utilizzando oauth su un sito Web pubblico?

Abbiamo creato il file ipa e il plist che punta ai posti giusti e creato la pagina html con l'url: itms-services: //? Action = download & url = {link al nostro plist}.

Il nostro problema tuttavia sta assicurando il processo di distribuzione. Vogliamo che i nostri dipendenti con iPad di proprietà dell'azienda siano in grado di scaricare l'app mentre sono in movimento (sono molto mobili). Quindi vogliamo collocare l'app plist e l'app su un sito Web pubblico che richiede l'accesso tramite un servizio oauth.

Il nostro problema è che se richiediamo l'autenticazione sugli URL per l'app e il plist, l'urms-services: // url non funziona più. Quello che succede è che l'utente fa clic sul link itms-services e vediamo una richiesta non autenticata per il plist (che viene reindirizzato per accedere) seguito da un "Impossibile connettersi a {hostname}" sul dispositivo.

Al momento, l'unico modo in cui posso vedere questo funziona è se i file ipa e plist non vengono controllati per l'autenticazione. Ciò significa (ritengo) che qualcuno che indovina i nostri URL nel nostro file plist possa creare il proprio link itms-services e scaricare l'app senza autorizzazione e ci causa in modo efficace a violare il nostro accordo con Apple per distribuirlo ai nostri dipendenti.

La mia domanda quindi è: come posso creare un collegamento itms-servizi che non espone i file ipa e plist al pubblico? Se è pertinente, il sito Web viene creato utilizzando nodejs e l'app è un'app PhoneGap.

risposta

7

Ho trovato una soluzione a questo.

Non è possibile utilizzare l'autenticazione oauth perché il processo di installazione di iOS non presenta l'opportunità di immettere le credenziali.

Invece, quando l'utente richiede la pagina su cui viene visualizzato il servizio itms-services: //, viene creata una stringa univoca per quell'utente e crittografata utilizzando AES-256, quindi memorizzata nel database.

Il nostro URL diventa quindi: itms-services://{url to plist}/{encryptedString}. Abbiamo provato a utilizzare una stringa di query, ma sembra che lo strumento di installazione di iOS non lo trasmetta.

Quando lo strumento di installazione richiede Plist, verifichiamo la stringa crittografata sul database, apriamo il plist e riscriviamo l'url nel file ipa su {url to ipa}/{encryptedString}.

Questo sembra funzionare abbastanza bene. L'unico problema a cui posso pensare al momento è che l'URL potrebbe essere condiviso pubblicamente come un utente legittimo con qualcuno che non dovrebbe avere accesso. Penso che potremmo aggirare questo assicurando che l'url sia sensibile al fattore tempo (ad esempio disponibile solo per 5 minuti).

Infine, qualsiasi richiesta al plist o all'ipa senza una stringa crittografata corretta viene rifiutata.

Spero sia utile per qualcuno!

+3

Quindi è come .. quasi una soluzione. Penso che questo sia un problema serio con il protocollo itms-services: //. Dovrebbe sicuramente supportare l'autenticazione. – xdumaine

Problemi correlati