2011-07-22 1 views
5

Je développe actuellement une application qui télécharge des informations à partir d'un service web que j'ai écrit (en .net) et je veux sécuriser la connexion afin que seule mon application puisse obtenir des données du un service. Quelle est la meilleure façon d'y parvenir?Connexion en toute sécurité à un service Web à partir d'une application Android

Je ne veux pas que quiconque puisse obtenir les détails d'accès s'il décompile/désossera mon application. Est-il possible de vérifier l'intégrité de l'application qui demande des données avant de les renvoyer? Je ne me soucie pas d'être en mesure de flairer le trafic pour voir ce qu'il contient, je ne veux simplement rien d'autre que mon application pour pouvoir soumettre des demandes pour protéger contre quiconque raclant toutes les données. Je suis vraiment un débutant en sécurité, donc un simple possible s'il vous plaît!

Répondre

2

Chris,

Vous pouvez lire sur un mécanisme appelé One Time Passwords (OTP). http://en.wikipedia.org/wiki/One-time_password

Vous pouvez concevoir votre application pour générer des OTP chaque fois qu'elle tente de se connecter à votre service Web. La responsabilité de valider l'authenticité de l'OTP réside sur le service Web. Laissez-moi entrer dans un petit détail maintenant. Imaginez que votre application intègre un algorithme qui génère et fournit un numéro de 256 bits chaque fois qu'il se connecte au service Web. Le service Web que vous concevez implémente également la partie validateur de l'OTP. Habituellement, l'algorithme OTP prend en compte "l'heure du jour" dans sa mise en œuvre (je suggère google autour de quelques implémentations gratuites). Ainsi, la fin du serveur (OTP Validator) ne fonctionne que si l'heure sur le serveur et le client est dans une fenêtre (disons + - n sec) de l'heure d'actualisation n. Généralement, le validateur OTP générera également l'OTP à sa fin et comparera simplement celui reçu. Vous pouvez en outre HASH le OTP avant d'envoyer et de comparer les hachages de OTP généré sur le serveur (ne aide pas ou est plus sécurisé si). Maintenant, la question se pose, que se passe-t-il si quelqu'un obtient l'algorithme (peut-être vous utilisez simplement un OTP open source). Eh bien, c'est censé être. Une bonne implémentation de la sécurité n'est accessible qu'avec un mot de passe correct, même si tout le reste est disponible pour l'attaquant. Pour ce faire, vous devrez peut-être ajouter une logique pour provisionner vos applications la première fois qu'ils se connectent, ce qui serait attendu par OTP. Ici, j'assume la confiance lors de la première utilisation. Vous pouvez ajouter une logique pour stocker un identifiant d'application résident unique qui est utilisé lors du calcul de l'OTP. De plus, vous devrez maintenir un mappage de "resident-id" vers "public-id" sur le serveur. C'est le "public-id" que vous pouvez attacher à OTP et envoyer au serveur pour valider l'envoi de l'application est en effet celui que vous avez provisionné. Cela vous oblige à mapper "public-id" à "resident-id" sur le serveur, puis à utiliser le "provisioned-id" de la même manière en générant l'OTP. En plus de cela, vous pouvez ajouter une logique pour simplement amuser le combo OTP + "public-id" une fois. Cela empêchera les attaques par relecture au cas où quelqu'un reniflerait et renverrait la même requête à votre service Web.

J'espère que cela vous donne une idée.

Ujjwal

0

vous pouvez voir les articles

et c'est Blackberry kSoap2 & Soap Header très utile

+0

Je ne suis pas sûr de comprendre votre réponse.En ce moment j'utilise le http standard pour récupérer des données du webservice. –

+0

http://stackoverflow.com/questions/1048310/how-to-call-a-net-web-service-from-android vous pouvez voir cette question – acebisli

+0

Je comprends parfaitement comment appeler ma webmethod, mon application le fait déjà . Je veux juste savoir comment sécuriser l'appel contre le vol de données! –

Questions connexes