Communiquer en toute sécurité entre le navigateur et une application native

12

Je travaille sur une application Web qui a besoin de données qu'elle ne peut obtenir qu'à partir de son navigateur d'application natif installé localement.

Comment contourner le sandbox du navigateur pour pouvoir communiquer (en toute sécurité, car les données sont potentiellement sensibles), avec une application native.

Dans le seul exemple que j'ai trouvé, l'utilisateur déplace manuellement certains jetons et fichiers entre les deux, ce qui est une expérience utilisateur horrible que j'aimerais éviter.

Zak Kus
la source
1
Vous pourrez peut-être faire fonctionner une sorte de solution où l'application native contient un petit serveur Web qui s'exécute sur localhost.
amon
Je pensais cela aussi ... J'avais de vagues inquiétudes non consolidées selon lesquelles cela ne serait pas "concerné". Y a-t-il des exemples d'applications faisant cela aujourd'hui? (écrivez ceci dans une réponse et vous obtiendrez probablement les points)
Zak Kus
Un navigateur intégré serait le meilleur. Intégrez le navigateur dans l'application et programmez vos interactions au besoin.
GregJava

Réponses:

7

Vous pouvez intégrer un serveur Web dans l'application native, puis votre client peut l'appeler via des liens codés en dur vers http: // localhost / xyz (vous devrez peut-être vous soucier des avertissements de script intersite ici et / ou exécuter le serveur sur un port non http). Si vous utilisez des websockets, votre application native peut même envoyer des données au navigateur Web une fois que le navigateur a initié la communication.

Je le fais moi-même localement, un contrôle de navigateur Web intégré demande des données de visualisation à partir d'un serveur Web personnalisé et lors du développement, je lance les deux sur le même PC.

Il existe de nombreux serveurs Web intégrés minuscules et efficaces pour C / C ++ (Mongoose, NxWeb, civetweb, etc.), C # a tendance à opter pour un serveur WCF complet, python est livré avec un petit serveur Web IIRC.

gbjbaanb
la source
Je travaille sur une solution comme celle-ci, mais il y a des problèmes lorsque le navigateur essaie de se connecter via websocket à partir d'une page Web à partir d'un domaine Internet (www.mydomain.com) avec un serveur websocket localhost, surtout si la page Web est servie avec HTTPS nécessite que le serveur websocket soit configuré pour utiliser wss (WebSocket avec SSL). Si vous utilisez un certificat auto-signé pour «sécuriser» le serveur websocket, le navigateur n'aimera pas votre connexion websocket. Firefox le permettra une fois que vous aurez accepté le certificat local non sécurisé, mais les autres navigateurs ne vous permettront pas de vous connecter aussi facilement.
David
1
Pour c # ces jours-ci, le meilleur serveur Web intégré est probablement owin auto-hébergé.
Esben Skov Pedersen,
8

Il existe plusieurs façons de mélanger une application native et une application de navigateur.

Vous pouvez intégrer le navigateur dans l'application native, tout comme les applications PhoneGap sur mobile. Cela vous permettra d'étendre le moteur javascript du navigateur et de passer des appels entre les deux.

Vous pouvez également repenser votre architecture. Demandez à l'application native et à l'application basée sur un navigateur d'utiliser le serveur comme intermédiaire. Ainsi, le navigateur et l'application native ne parlent qu'au serveur Web, qui transmet les informations entre les deux si nécessaire.

Ou si vous avez besoin de fonctionnalités natives ... créez simplement une seule application native.

Je ne recommande pas l'approche du «serveur Web local» pour autre chose que les applications exécutées dans des environnements contrôlés. Si votre logiciel est destiné à être installé et exécuté sur des machines d'utilisateur final avec des exigences de support minimales, vous vous retrouverez face à une multitude de problèmes liés au pare-feu et aux logiciels antivirus.

GrandmasterB
la source
Les données dont j'ai besoin depuis l'application native sont de savoir si cette machine (plutôt que l'utilisateur) est acceptable. Si vous utilisez un serveur Web normal comme intermédiaire, pouvez-vous être sûr que la machine sur laquelle se trouve le navigateur est la même que celle utilisée par l'application native. De plus, tout à fait d'accord, il ne devrait pas y en avoir deux sans raison valable, mais nous avons nos raisons ^ _ ^
Zak Kus
De plus, il n'est pas clair pour moi que l'intégration d'un navigateur dans l'application native permettrait réellement la communication entre le navigateur et l'application native
Zak Kus
@Zak comme je l'ai dit, vous pouvez étendre le moteur javascript pour leur permettre de se parler comme le fait PhoneGap sur les applications mobiles. Vous définiriez des méthodes qui pourraient être appelées par le javascript sur la page qui sont exécutées par l'application native, ou appeleriez des fonctions javascript à partir de l'application native.
GrandmasterB
L'utilisation d'un navigateur intégré comme celui-ci serait, je pense, le meilleur moyen de s'assurer que le navigateur fonctionne sur la machine sur laquelle il doit fonctionner.
GrandmasterB
Techniquement, je conviendrais qu'une application native avec une vue Web est le moyen le plus simple. Cependant, selon cet article en langue allemande de Heise Online, le visualiseur Web Android pour Android 4.3 et inférieur présente de graves problèmes de sécurité qui ne peuvent pas être résolus.
k3b