Comunicación segura entre el navegador y una aplicación nativa

12

Estoy trabajando en una aplicación web que necesita datos que solo puede obtener de su navegador de aplicaciones nativas instalado localmente.

¿Cómo puede moverse por el entorno limitado del navegador para poder comunicarse (de forma segura, ya que los datos son potencialmente confidenciales) con una aplicación nativa?

En el único ejemplo que encontré, el usuario movió manualmente algunos tokens y archivos entre los dos, lo cual es una experiencia de usuario horrible que me gustaría evitar.

Zak Kus
fuente
1
Es posible que pueda obtener algún tipo de solución que funcione donde la aplicación nativa contiene un pequeño servidor web que se ejecuta en localhost.
amon
Yo también pensaba que ... tenía vagas preocupaciones no consolidadas de que eso no estaría "preocupado". ¿Hay ejemplos de aplicaciones que hagan esto hoy? (escriba esto en una respuesta y probablemente obtendrá los puntos)
Zak Kus
Un navegador integrado sería lo mejor. Incruste el navegador en la aplicación y programe sus interacciones según sea necesario.
GregJava

Respuestas:

7

Puede incrustar un servidor web en la aplicación nativa, luego su cliente puede hacer llamadas a él a través de enlaces codificados a http: // localhost / xyz (es posible que deba preocuparse por las advertencias de secuencias de comandos de sitios cruzados aquí y / o ejecutar el servidor en un puerto no http). Si usa websockets, su aplicación nativa puede incluso enviar datos al navegador web una vez que el navegador ha iniciado la comunicación.

Lo hago yo mismo localmente, un control de navegador web incorporado solicita datos de visualización de un servidor web personalizado y, cuando lo desarrollo, ejecuto ambos en la misma PC.

Hay muchos servidores web integrados pequeños y eficientes para C / C ++ (Mongoose, NxWeb, civetweb, etc.), C # tiende a elegir un servidor WCF completo, python viene con un pequeño servidor web en su IIRC.

gbjbaanb
fuente
Estoy trabajando en una solución como esta, pero hay algunos problemas cuando el navegador intenta conectarse a través de websocket desde una página web desde un dominio de Internet (www.mydomain.com) con un servidor localhost websocket, especialmente si la página web se sirve con HTTPS requiere que el servidor websocket esté configurado para usar wss (WebSocket con SSL). Si utiliza un certificado autofirmado para "asegurar" el servidor websocket, entonces al navegador no le gustará su conexión websocket. Firefox lo permitirá una vez que acepte el certificado local inseguro, pero otros navegadores no le permitirán conectarse tan fácilmente.
David
1
Para c # en estos días, el mejor servidor web incorporado es probablemente propio.
Esben Skov Pedersen
8

Hay un par de formas en que puede mezclar una aplicación nativa y una aplicación de navegador.

Puede incrustar el navegador dentro de la aplicación nativa, al igual que las aplicaciones PhoneGap en dispositivos móviles. Eso le permitirá extender el motor de JavaScript del navegador y le permitirá hacer llamadas entre los dos.

Alternativamente, reconsidere su arquitectura. Haga que tanto la aplicación nativa como la aplicación basada en navegador utilicen el servidor como intermediario. Entonces, tanto el navegador como la aplicación nativa solo se comunican con el servidor web, que reenvía la información entre los dos según sea necesario.

O si necesita funcionalidad nativa ... simplemente haga una sola aplicación nativa.

No recomiendo el enfoque de 'servidor web local' para nada que no sean aplicaciones que se ejecutan en entornos controlados. Si su software está destinado a instalarse y ejecutarse en máquinas de usuarios finales con requisitos mínimos de soporte, se encontrará con una gran cantidad de problemas relacionados con el firewall y el software antivirus.

Gran maestro B
fuente
Los datos que necesito de la aplicación nativa están en si esa máquina (en lugar de usuario) es aceptable. Si utiliza un servidor web normal como intermediario, ¿puede estar seguro de que la máquina en la que se encuentra el navegador es la misma que evaluó la aplicación nativa? Además, totalmente de acuerdo, no debería tener dos sin una buena razón, pero tenemos nuestras razones ^ _ ^
Zak Kus
Además, no está claro para mí cómo incrustar un navegador en la aplicación nativa realmente permitiría la comunicación entre el navegador y la aplicación nativa
Zak Kus
@Zak como dije, puede extender el motor de JavaScript para permitirles hablar entre ellos de la misma manera que PhoneGap lo hace en aplicaciones móviles. Definiría métodos a los que JavaScript podría llamar en la página que ejecuta la aplicación nativa, o llamaría a funciones de JavaScript desde la aplicación nativa.
GrandmasterB
Creo que usar un navegador incrustado como ese sería la mejor manera de garantizar que el navegador se ejecute en la máquina en la que necesita estar funcionando.
GrandmasterB
Técnicamente, estaría de acuerdo en que una aplicación nativa con una vista web es la forma más fácil. Sin embargo, de acuerdo con este artículo en alemán de Heise Online, el visor web de Android para Android 4.3 y versiones posteriores tiene serios problemas de seguridad que no se pueden solucionar.
k3b