2009-11-12 4 views
0

Je suis en train de développer une idée de service Web qui n'acceptera que les demandes provenant d'applications de bureau (et d'applications de bureau uniquement) qui y ont été enregistrées. Je ne peux pas vraiment utiliser une «clé secrète» pour l'authentification car il serait très facile à découvrir et les applications qui utilisent l'API seraient déployées sur de nombreuses machines différentes qui ne sont pas contrôlées par le détenteur du compte.Comment identifier de façon unique une application de bureau faisant une demande à mon API?

Comment puis-je identifier de façon unique une application de manière multi-plateforme, ce qui ne rend pas incroyablement facile l'usurpation d'identité?

+0

Inspirez-vous de oAuth. – jldupont

Répondre

1

Vous ne pouvez pas. Tant que vous placez l'information dans un endroit incontrôlé, vous devez supposer que l'information sera diffusée. Le cryptage ne s'applique pas vraiment, car les seules approches basées sur le cryptage impliquent de conserver une clé du côté client.

La seule vraie solution consiste à mettre la valeur du service dans le service lui-même et à faire en sorte que le client de bureau soit un moyen peu coûteux d'accéder à ce service. Les MMORPG font ceci: vous pouvez télécharger les jeux gratuitement, mais vous devez vous inscrire pour jouer. La valeur est dans le service, et la capacité à se connecter au service est contrôlée par le service (il authentifie les joueurs lors de leur première connexion).

Ou, vous faites juste trop de mal pour briser la sécurité. Par exemple, en mettant une vérification des informations d'identification au début et à la fin de chaque méthode. Et, parce que quelqu'un finira par créer un binaire qui corrige toutes ces vérifications, en chargeant des morceaux de l'application à partir du serveur. Avec des informations d'identification et des contrôles d'horodatage en place, et en utilisant une disposition de mémoire différente pour chaque téléchargement.


Votre commentaire propose un scénario beaucoup plus simple. Les entreprises sont beaucoup plus motivées à protéger l'accès au service, et des ententes juridiques seront en vigueur concernant votre responsabilité si elles ne protègent pas l'accès.

L'approche la plus simple est ce que Amazon fait: fournir une clé secrète, et exiger que tous les clients chiffrent avec cette clé secrète. Oui, les employés voyous au sein de ces entreprises peuvent s'en sortir avec le secret. Ainsi, vous donnez à l'entreprise l'option (ou peut-être l'exigez) de changer la clé régulièrement. Peut-être quotidiennement.

Vous pouvez améliorer cela avec un contrôle IP sur tous les accès: chaque client vous fournira un ensemble d'adresses IP valides. Si quelqu'un sort avec le logiciel de bureau, ils ne peuvent toujours pas l'utiliser.

Ou, vous pouvez demander que votre service soit mandaté par l'entreprise. Ceci est particulièrement utile si le service n'est accessible qu'à partir de l'intérieur du pare-feu de l'entreprise.

+0

C'est la chose. Ce n'est pas mon application de bureau. Mon service Web expose des fonctionnalités aux entreprises qui souhaitent l'utiliser dans leurs propres applications de bureau. Je veux juste faire en sorte qu'il soit impossible pour quelqu'un de soumettre de fausses données aux comptes de ces entreprises. –

+0

Eh bien, donnez-leur les informations d'identification, et si elles compromettent les informations d'identification - leur problème. – Bozho

0

Cryptez-le (la clé secrète), codez-le en dur, puis masquer le programme. Utilisez HTTPS pour le service Web afin qu'il ne soit pas intercepté par les renifleurs de réseau.

0

Générez la clé en utilisant le matériel ID speciffic - ID de processeur, adresse MAC, etc. Pensez à un GUID déterministe.

Vous pouvez ensuite le crypter et l'envoyer sur le réseau.

Questions connexes