2010-02-13 9 views
3

Comment puis-je m'assurer que seule mon application iphone est autorisée à utiliser l'application de mon application pour envoyer et recevoir des données? Je dois probablement utiliser une clé secrète, mais je ne sais pas comment. Puis-je utiliser post/get pour envoyer ma clé statique sur https? Ou dois-je utiliser un algorithme de clé secrète dynamique?clé secrète du moteur de l'application pour l'accès à l'iphone

Toute aide serait appréciée! Bjorn

Répondre

2

En supposant que vous pensez que vous pouvez garder le secret sur l'application iPhone d'être découvert, ce dont vous avez besoin est un HMAC. Pour chaque requête que vous faites, passez le texte de la requête dans une fonction comme HMAC-SHA1, avec votre clé secrète comme clé, et ajoutez le résultat à la requête que vous faites. Lorsque le serveur reçoit la demande, effectuez la même opération et vérifiez que les HMAC correspondent.

+0

Cela vous pose également un problème de sécurité. Que se passe-t-il si quelqu'un intercepte le HMAC et l'utilise de manière malveillante pour afficher des centaines de fois exactement les mêmes données à votre service, dupliquant ainsi vos données? – Rippo

+0

Ensuite, vous avez un problème - le même problème que vous avez avec un autre régime. D'où mon commentaire d'ouverture "En supposant que vous pensez que vous pouvez garder le secret sur l'application iPhone d'être découvert ...". –

+0

Désolé, j'ai mal lu votre commentaire la première fois. Vous avez raison - vous devez inclure un nonce et/ou un horodatage pour empêcher les attaques de relecture. Bien sûr, cela peut ne pas poser problème selon son modèle de menace. –

0

Je ne suis pas totalement sûr de ce que vous essayez d'accomplir. Mais, ayant des secrets partagés ou des clés API dans votre application iPhone est généralement une mauvaise idée.

Vous parlez de votre propre application AppEngine. Pourquoi ne créez-vous pas un service Web simple (basé sur JSON) du côté AppEngine auquel votre application s'adresse? Je doute qu'il soit nécessaire d'utiliser directement vos informations d'identification AppEngine depuis votre application iPhone.

Si cela ne répond pas à votre question, veuillez fournir plus de détails.

+0

J'ai un service web api, mais je veux seulement que mon application iphone en parle. Dans la situation actuelle, l'API est disponible pour le monde entier, donc n'importe qui peut envoyer de mauvaises données et ma base de données sera remplie de données que je ne veux pas avoir. – Bjorn

0

Utilisez un certificat SSL sur votre service Web car toutes les données transmises à celui-ci sont cryptées.

Une connexion SSL cryptée nécessite toutes les informations entre un client et un serveur à chiffrer par le logiciel d'envoi et décryptés par le logiciel de réception, la protection des informations privées d'interception sur l' Internet.

Egalement lors de chaque appel au service, envoyez un seul guide que vous avez défini avec vos données. Ce guid doit être validé avant que le service Web n'effectue une action. Pour verrouiller encore plus loin, vous pouvez créer un service qui génère un guid qui doit être retransmis pour tout service d'appel ultérieur.

Assurez-vous également de ne permettre à personne de voir votre wsdl sur le serveur sinon ils peuvent deviner vos paramètres.

Un certifcate SSL de RapidSSL coûte 17 $ par année, donc le coût ne doit pas vous inquiéter.

+1

Cela n'aide pas - un certificat SSL valide l'identité du service, pas le client. Il pourrait intégrer un certificat client, mais App Engine n'a aucun moyen de vérifier les certificats clients. –

+0

Avez-vous lu mon message? Le SSL est juste un moyen d'empêcher les gens d'espionner ce que vous envoyez réellement entre le client et le serveur. Passer un guid à travers semble être un bon moyen. – Rippo