Comunicação entre o navegador e um aplicativo nativo com segurança

12

Estou trabalhando em aplicativos da Web que precisam de dados que só podem ser obtidos no navegador de aplicativos nativo instalado localmente.

Como você pode contornar a caixa de proteção do navegador para poder se comunicar (com segurança, pois os dados são potencialmente sensíveis), com um aplicativo nativo.

No único exemplo que encontrei, o usuário move manualmente alguns tokens e arquivos entre os dois, o que é uma experiência horrível para o usuário que eu gostaria de evitar.

Zak Kus
fonte
1
Você pode conseguir algum tipo de solução funcionando onde o aplicativo nativo contém um pequeno servidor da Web que é executado no host local.
amon
Eu também estava pensando nisso ... Eu tinha vagas preocupações não consolidadas de que isso não estaria "preocupado". Existem exemplos de aplicativos fazendo isso hoje? (escrever isto em uma resposta e você provavelmente vai obter os pontos)
Zak Kus
Um navegador incorporado seria o melhor. Incorpore o navegador ao aplicativo e programe suas interações conforme necessário.
22815 GregGava

Respostas:

7

Você pode incorporar um servidor da Web no aplicativo nativo e, em seguida, seu cliente pode fazer chamadas através de links codificados para http: // localhost / xyz (pode ser necessário se preocupar com os avisos de script entre sites aqui e / ou executar o servidor em uma porta não http). Se você usa websockets, seu aplicativo nativo pode até enviar dados ao navegador da web assim que o navegador inicia a comunicação.

Eu mesmo faço isso localmente, um controle de navegador da Web incorporado solicita dados de visualização de um servidor da Web personalizado e, ao desenvolver, eu executo os dois no mesmo PC.

Existem muitos servidores da web incorporados minúsculos e eficientes para C / C ++ (Mongoose, NxWeb, civetweb etc.), o C # costuma ter um servidor WCF completo, o python vem com um pequeno servidor da Web no IIRC.

gbjbaanb
fonte
Estou trabalhando em uma solução como esta, mas há alguns problemas quando o navegador tenta se conectar via websocket a partir de uma página da web de um domínio da Internet (www.mydomain.com) com um servidor localhost da websocket, especialmente se a página da web for veiculada com HTTPS, ele requer que o servidor websocket esteja configurado para usar o wss (WebSocket com SSL). Se você usar um certificado autoassinado para "proteger" o servidor do websocket, o navegador não gostará da sua conexão com o websocket. O Firefox permitirá que você aceite o certificado local inseguro, mas outros navegadores não permitirão a conexão tão fácil.
David
1
Para c # hoje em dia, o melhor servidor da Web incorporado provavelmente é um servidor auto-hospedado.
Esben Skov Pedersen
8

Existem algumas maneiras de misturar um aplicativo nativo e um navegador.

Você pode incorporar o navegador ao aplicativo nativo, como os aplicativos PhoneGap no celular. Isso permitirá que você estenda o mecanismo javascript do navegador e faça chamadas entre os dois.

Como alternativa, repensar sua arquitetura. Faça com que o aplicativo nativo e o aplicativo baseado em navegador usem o servidor como intermediário. Portanto, o navegador e o aplicativo nativo conversam apenas com o servidor da Web, que encaminha as informações entre os dois conforme necessário.

Ou se você precisar de funcionalidade nativa ... basta criar um único aplicativo nativo.

Eu não recomendo a abordagem 'servidor da web local' para nada além de aplicativos executados em ambientes controlados. Se seu software se destina a instalar e executar em máquinas de usuários finais com requisitos mínimos de suporte, você se deparará com uma série de problemas relacionados a firewall e software antivírus.

GrandmasterB
fonte
Os dados que eu preciso do aplicativo nativo são sobre se essa máquina (e não o usuário) é aceitável. Se você usa um servidor da Web normal, pode ter certeza de que a máquina em que o navegador está é a mesma que o aplicativo nativo avaliou. Além disso, concordo totalmente, shoudln't ter dois sem uma boa razão, mas temos as nossas razões ^ _ ^
Zak Kus
Além disso, não é claro para mim como a incorporação de um navegador no aplicativo nativo seria realmente permitir a comunicação entre o navegador eo aplicativo nativo
Zak Kus
@Zak, como eu disse, você pode estender o mecanismo javascript para permitir que eles conversem um com o outro, como o PhoneGap faz em aplicativos móveis. Você definiria métodos que poderiam ser chamados pelo javascript na página executada pelo aplicativo nativo ou chamaria funções javascript do aplicativo nativo.
GrandmasterB
Usar um navegador incorporado como esse seria, acho eu, a melhor maneira de garantir que o navegador esteja rodando na máquina em que ele precisa estar rodando.
GrandmasterB
Tecnicamente, eu concordo que um aplicativo nativo com uma visualização na web é a maneira mais fácil. No entanto, de acordo com este artigo em alemão da heise online, o visualizador da web para Android 4.3 ou posterior apresenta sérios problemas de segurança que não podem ser corrigidos.
K3b