2012-06-02 6 views
5

Posiadamy dystrybucję aplikacji, którą chcielibyśmy dystrybuować tylko w naszej organizacji.Jak zabezpieczyć dystrybucję korporacyjną systemu iOS za pomocą usługi Oauth na ogólnodostępnej stronie internetowej?

Zbudowaliśmy plik ipa i plik plist wskazujący właściwe miejsca i utworzyliśmy stronę html z adresem: itms-services: //? Action = download & url = {link do naszego plist}.

Naszym problemem jest jednak zabezpieczenie procesu dystrybucji. Chcemy, aby nasi pracownicy wraz z firmowymi iPadami mogli pobrać aplikację w podróży (są bardzo mobilni). Dlatego chcemy umieścić plist i aplikację na publicznej stronie internetowej, która wymaga logowania za pomocą usługi oauth.

Naszym problemem jest to, że jeśli wymagają uwierzytelniania na URL dla aplikacji i plist, w ITMS-usług: // URL już nie działa. Co się dzieje, to że użytkownik klika łącze itms-services i widzimy nieuwierzytelnione żądanie plist (które jest przekierowywane do logowania), a następnie "Nie można połączyć się z {hostname}" na urządzeniu.

Obecnie jedynym sposobem, widzę tej pracy jest to, czy ipa i pliki PLIST nie są sprawdzane podczas uwierzytelniania. Oznacza to (moim zdaniem), że ktoś, kto zgadnie nasze adresy URL do pliku plist, może utworzyć swój własny link do usług itms i pobrać aplikację bez upoważnienia i skutecznie spowodować, że naruszymy naszą umowę z firmą Apple, aby dystrybuować tylko naszych pracowników.

Moje pytanie zatem brzmi - w jaki sposób można utworzyć łącze ITMS-usług, które nie narażają pliki IPA i plist do publicznej wiadomości? Jeśli jest to istotne, strona jest budowana przy użyciu nodejs, a aplikacja to aplikacja PhoneGap.

Odpowiedz

7

Wymyśliłem rozwiązanie tego problemu.

Nie możemy używać uwierzytelniania oauth, ponieważ proces instalacji systemu iOS nie daje możliwości wprowadzenia poświadczeń.

Zamiast tego, gdy użytkownik poprosi o stronę, na której wyświetlamy łącze itms-services: //, tworzymy unikalny ciąg dla tego użytkownika i szyfrujemy go za pomocą AES-256, a następnie przechowujemy go w bazie danych.

Nasz adres URL staje się następujący: itms-services://{url to plist}/{encryptedString}. Próbowaliśmy użyć ciągu zapytania, ale wygląda na to, że narzędzie instalacji systemu iOS nie przekazuje tego dalej.

Gdy narzędzie instalacyjne zażąda Plist, sprawdzamy zaszyfrowany ciąg w bazie danych, otwiera plik plist i przepisujemy adres URL na plik IPA na {url to ipa}/{encryptedString}.

Wydaje się, że działa całkiem dobrze. Jedyny problem, jaki mogę sobie obecnie wyobrazić, to że URL może być publicznie udostępniany jako prawowity użytkownik z osobą, która nie powinna mieć dostępu. Myślę, że moglibyśmy obejść ten problem, zapewniając, że URL jest zależny od czasu (na przykład dostępny tylko przez 5 minut).

Wreszcie, wszystkie żądania do plist lub ipa bez poprawnego zaszyfrowanego ciągu zostaną odrzucone.

Mam nadzieję, że jest to przydatne dla kogoś!

+3

To jest jak ... prawie rozwiązanie. Myślę, że jest to poważny problem z protokołem itms-services: //. Powinno to zdecydowanie wspierać uwierzytelnianie. – xdumaine

Powiązane problemy