Bezpieczna komunikacja między przeglądarką a aplikacją natywną

12

Pracuję nad aplikacją internetową, która potrzebuje danych, które może uzyskać tylko z zainstalowanej lokalnie przeglądarki natywnej aplikacji.

Jak poruszać się po obszarze izolowanym przeglądarki, aby móc komunikować się (bezpiecznie, ponieważ dane są potencjalnie wrażliwe), z aplikacją natywną.

W jedynym przykładzie, który znalazłem, użytkownik ręcznie przenosił między tokenami niektóre tokeny i pliki, co jest okropnym doświadczeniem użytkownika, którego chciałbym uniknąć.

Zak Kus
źródło
1
Być może uda Ci się znaleźć jakieś rozwiązanie działające, gdy natywna aplikacja zawiera mały serwer WWW działający na localhost.
amon
Myślałem też, że ... Miałem niejasne, niejednolite obawy, że to nie byłoby „zaniepokojone”. Czy są dziś jakieś przykłady aplikacji, które to robią? (napisz to w odpowiedzi, a prawdopodobnie dostaniesz punkty)
Zak Kus
Najlepsza byłaby wbudowana przeglądarka. Osadź przeglądarkę w aplikacji i odpowiednio zaprogramuj interakcje.
GregJava,

Odpowiedzi:

7

Możesz osadzić serwer WWW w natywnej aplikacji, a następnie twój klient może wykonywać do niego połączenia za pomocą zakodowanych na stałe linków do http: // localhost / xyz (możesz się martwić o ostrzeżenia o skryptach między witrynami i / lub uruchomić serwer na porcie innym niż http). Jeśli korzystasz z gniazd internetowych, Twoja natywna aplikacja może nawet przesyłać dane do przeglądarki internetowej, gdy tylko przeglądarka zainicjuje komunikację.

Robię to lokalnie, wbudowany kontroler przeglądarki internetowej żąda danych wizualizacji z niestandardowego serwera WWW, a podczas programowania uruchamiam oba na tym samym komputerze.

Istnieje wiele małych i wydajnych wbudowanych serwerów WWW dla C / C ++ (Mongoose, NxWeb, civetweb itp.), C # zwykle dąży do pełnego serwera WCF, python zawiera mały serwer WWW IIRC.

gbjbaanb
źródło
Pracuję nad takim rozwiązaniem, ale są pewne problemy, gdy przeglądarka próbuje połączyć się za pośrednictwem websocket ze strony internetowej z domeny internetowej (www.mydomain.com) z serwerem websocket localhost, szczególnie jeśli strona jest obsługiwana z HTTPS wymaga skonfigurowania serwera websocket do używania wss (WebSocket z SSL). Jeśli użyjesz certyfikatu z podpisem własnym, aby „zabezpieczyć” serwer WebSocket, przeglądarce nie spodoba się twoje połączenie WebSocket. Firefox pozwoli na to, gdy zaakceptujesz niepewny certyfikat lokalny, ale inne przeglądarki nie pozwolą ci się tak łatwo połączyć.
David
1
W dzisiejszych czasach najlepszy wbudowany serwer internetowy jest prawdopodobnie programem hostowanym na własny rachunek.
Esben Skov Pedersen
8

Istnieje kilka sposobów łączenia aplikacji natywnej i aplikacji przeglądarki.

Możesz osadzić przeglądarkę w natywnej aplikacji, podobnie jak aplikacje PhoneGap na urządzeniach mobilnych. To pozwoli ci rozszerzyć silnik javascript przeglądarki i będziesz mógł wykonywać połączenia między nimi.

Możesz też przemyśleć swoją architekturę. Niech zarówno aplikacja natywna, jak i przeglądarka używają serwera jako pośrednika. Tak więc zarówno przeglądarka, jak i natywna aplikacja komunikują się tylko z serwerem WWW, który przekazuje informacje między nimi w razie potrzeby.

Lub jeśli potrzebujesz natywnej funkcjonalności ... po prostu stwórz pojedynczą aplikację natywną.

Nie polecam podejścia „lokalnego serwera WWW” do niczego innego niż aplikacje działające w kontrolowanych środowiskach. Jeśli twoje oprogramowanie jest przeznaczone do instalowania i uruchamiania na komputerach użytkowników końcowych przy minimalnych wymaganiach dotyczących wsparcia, znajdziesz rozwiązanie wielu problemów związanych z zaporą ogniową i oprogramowaniem antywirusowym.

Grandmaster B.
źródło
Dane, których potrzebuję z natywnej aplikacji, dotyczą tego, czy ten komputer (a nie użytkownik) jest akceptowalny. Jeśli używasz normalnego serwera internetowego jako pośrednika, możesz być pewien, że komputer, na którym działa przeglądarka, jest taki sam, jak oceniana przez aplikację natywną. Poza tym całkowicie się zgadzam, nie powinniśmy mieć dwóch bez powodu, ale mamy swoje powody ^ _ ^
Zak Kus
Ponadto nie jest dla mnie jasne, jak osadzenie przeglądarki w natywnej aplikacji faktycznie umożliwiłoby komunikację między przeglądarką a natywną aplikacją
Zak Kus
@Zak, jak powiedziałem, możesz rozszerzyć silnik javascript, aby umożliwić im rozmowę, tak jak PhoneGap w aplikacjach mobilnych. Zdefiniowałbyś metody, które mogą być wywoływane przez javascript na stronie, które są wykonywane przez natywną aplikację, lub wywoływać funkcje javascript z natywnej aplikacji.
GrandmasterB
Myślę, że użycie takiej wbudowanej przeglądarki byłoby najlepszym sposobem na zapewnienie, że przeglądarka działa na komputerze, na którym musi działać.
GrandmasterB
Technicznie zgodziłbym się, że natywna aplikacja z widokiem sieci jest najprostszym sposobem. Jednak zgodnie z tym artykułem w języku niemieckim z heise online przeglądarka internetowa Androida dla Androida 4.3 i niższych ma poważne problemy z bezpieczeństwem, których nie można naprawić.
k3b