Comunicazione sicura tra browser e un'applicazione nativa


12

Sto lavorando su un'applicazione Web che necessita di dati che può ottenere solo dal browser dell'applicazione nativa installato localmente.

Come aggirare la sandbox del browser in modo da poter comunicare (in modo sicuro, poiché i dati sono potenzialmente sensibili), con un'applicazione nativa.

Nell'unico esempio che ho trovato, l'utente sposta manualmente alcuni token e file tra i due, che è un'esperienza utente orribile che vorrei evitare.


1
Potresti essere in grado di ottenere un qualche tipo di soluzione funzionante in cui l'applicazione nativa contiene un piccolo server Web che viene eseguito su localhost.
amon,

Pensavo che anche io ... Avevo vaghe preoccupazioni non consolidate che non sarebbero state "preoccupate". Ci sono esempi di applicazioni che lo fanno oggi? (scrivilo in una risposta e probabilmente otterrai i punti)
Zak Kus

Un browser incorporato sarebbe il migliore. Incorporare il browser nell'app e programmare le interazioni secondo necessità.
GregJava,

Risposte:


7

È possibile incorporare un server Web nell'applicazione nativa, quindi il client può effettuare chiamate tramite collegamenti hardcoded a http: // localhost / xyz (potrebbe essere necessario preoccuparsi degli avvisi di scripting tra siti qui e / o eseguire il server su una porta non http). Se si utilizzano WebSocket, l'applicazione nativa può persino inviare i dati al browser Web una volta che il browser ha avviato la comunicazione.

Lo faccio da solo a livello locale, un controllo del browser Web incorporato richiede i dati di visualizzazione da un server Web personalizzato e durante lo sviluppo eseguo entrambi sullo stesso PC.

Esistono molti server Web incorporati piccoli ed efficienti per C / C ++ (Mongoose, NxWeb, civetweb ecc.), C # tende ad andare per un server WCF completo, python viene fornito con un piccolo server web in esso IIRC.


Sto lavorando a una soluzione come questa, ma ci sono alcuni problemi quando il browser tenta di connettersi tramite websocket da una pagina Web da un dominio Internet (www.mydomain.com) con un server websocket localhost, specialmente se la pagina Web è servita con HTTPS richiede che il server websocket sia configurato per utilizzare wss (WebSocket con SSL). Se si utilizza un certificato autofirmato per "proteggere" il server WebSocket, il browser non gradirà la connessione WebSocket. Firefox lo consentirà una volta accettato il certificato locale non sicuro, ma altri browser non ti permetteranno di collegarti così facilmente.
David,

1
Per c # in questi giorni il miglior server web incorporato è probabilmente owin self-hosted.
Esben Skov Pedersen,

8

Ci sono un paio di modi in cui puoi mescolare un'app nativa e un'app per browser.

Puoi incorporare il browser all'interno dell'app nativa, proprio come fanno le app PhoneGap sui dispositivi mobili. Ciò ti consentirà di estendere il motore javascript del browser e di effettuare chiamate tra i due.

In alternativa, ripensare la tua architettura. Sia l'applicazione nativa che l'applicazione basata su browser utilizzano il server come intermediario. Quindi sia il browser che l'applicazione nativa parlano solo con il web server, che inoltra le informazioni tra i due secondo necessità.

O se hai bisogno di funzionalità native ... crea una sola applicazione nativa.

Non raccomando l'approccio del "web server locale" per qualsiasi cosa diversa dalle applicazioni eseguite in ambienti controllati. Se il tuo software è destinato all'installazione e all'esecuzione su macchine per utenti finali con requisiti minimi di supporto, ti ritroverai a fronteggiare tutta una serie di problemi relativi al firewall e al software antivirus.


I dati di cui ho bisogno dall'app nativa sono se la macchina (piuttosto che l'utente) è accettabile. Se si utilizza un normale server Web come intermediario, si può essere certi che la macchina su cui si trova il browser sia la stessa valutata dall'app nativa. Inoltre, sono pienamente d'accordo, non avremmo due senza una buona ragione, ma abbiamo le nostre ragioni ^ _ ^
Zak Kus

Inoltre, non mi è chiaro come l'incorporamento di un browser nell'app nativa consentirebbe effettivamente la comunicazione tra il browser e l'app nativa
Zak Kus,

@Zak, come ho detto, puoi estendere il motore javascript per consentire loro di parlare tra loro come fa PhoneGap sulle app mobili. Definiresti metodi che potrebbero essere chiamati dal javascript nella pagina che sono eseguiti dall'app nativa, o chiameresti le funzioni javascript dall'app nativa.
GrandmasterB,

L'utilizzo di un browser incorporato come quello sarebbe, credo, il modo migliore per garantire che il browser sia in esecuzione sulla macchina su cui deve essere in esecuzione.
GrandmasterB,

Tecnicamente concordo sul fatto che un'app nativa con una vista Web sia il modo più semplice. Tuttavia, secondo questo articolo in lingua tedesca di heise online, il visualizzatore web Android per Android 4.3 e versioni precedenti presenta gravi problemi di sicurezza che non possono essere risolti.
k3b,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.