2010-10-14 21 views
4

Nous développons une API REST destinée à être utilisée par deux applications mobiles. Il est important que nous soyons en mesure de faire confiance aux identités de ces applications mobiles. Dans notre conception actuelle, chaque appel API est authentifié avec un paramètre "API Key" et sécurisé avec HTTPS. Je suis préoccupé par le fait que la clé API est intégrée à chaque copie de l'application mobile, ce qui signifie que nous ne pouvons pas la garder secrète. Ce sera sur des milliers de téléphones, et théoriquement n'importe quel hacker avec un éditeur binaire ou un analyseur de trafic HTTP pourrait extraire la clé API et ensuite se poser comme l'une des applications, nous envoyant des demandes que nous n'aurions pas d'autre choix que de faire confiance. Les certificats clients semblent présenter le même risque.Prévention du vol d'identité des clients de l'API mobile

Existe-t-il une architecture qui résout ce problème?

+1

Vous voulez stocker un secret sur le client de manière à ce qu'il ne puisse pas être récupéré? Hmm – Greg

+0

Est-ce que les parties qui ont l'application mobile ont des motivations pour garder la clé secrète? –

+0

@Greg - ne doit pas être un secret - juste un moyen d'être en mesure de faire confiance à l'application. – realworldcoder

Répondre

3

Il est discuté de temps en temps dans différents endroits, y compris StackOverflow. En bref - tout ce que vous avez mis en possession de l'utilisateur n'est plus le vôtre. Bien sûr, vous pouvez brouiller la clé privée, mais je vois au moins trois façons de contourner vos mesures de sécurité. La seule façon de résoudre un problème pourrait être d'utiliser un dispositif cryptographique (carte à puce ou cryptotoken USB) qui garde les clés privées et secrètes et ne les laisse pas sortir, mais avec les ordinateurs de poche, l'utilisation de tels dispositifs est assez compliquée (sinon impossible) du point de vue technique et du point de vue de l'utilisabilité.

Vous pouvez également vouloir reconsidérer votre approche et laisser tout logiciel client utiliser le service étant donné qu'il en paie le coût. Et votre serveur authentifiera les utilisateurs et non les logiciels. Ensuite, le sujet de garder les données de connexion secrètes sera la tâche des utilisateurs.

+2

Notez également que vous pouvez ajouter l'IMEI (Android) ou UUID (iPhone) pour aider à l'identification. assurez-vous que cela correspond avec le client (envoyer un e-mail de confirmation?) – KevinDTimm

+0

Bons points. La facturation par appel d'API aiderait certainement à améliorer la sécurité des clés privées, mais notre activité repose sur la gratuité de l'API et la facilité d'utilisation des applications. C'est un fait que notre serveur va authentifier les utilisateurs - ce que nous ne voulons pas, c'est une application frauduleuse là-bas essayant de voler les mots de passe des utilisateurs ou des détails de carte de crédit par force brute via notre API. – realworldcoder

+0

@RealWorldCoder en essayant d'autoriser vos applications n'est probablement pas le meilleur moyen d'empêcher une mauvaise utilisation de l'API, surtout si une telle utilisation abusive peut constituer un vol de détails de carte de crédit. Je ferais mieux de rendre l'API plus robuste pour éviter de telles possibilités. –