Question

Je travaille sur un service REST qui a quelques exigences:

  1. Il doit être sécurisé.
  2. Les utilisateurs ne doivent pas pouvoir falsifier les demandes.

Ma solution actuelle consiste à créer un en-tête d'autorisation ressemblant à ceci (il en va de même pour les services Web d'Amazon):

Authorization: MYAPI username:signature

Ma question est de savoir comment former la signature. Lorsque l'utilisateur se connecte au service, il reçoit une clé secrète qu'il devrait pouvoir utiliser pour signer les demandes. Cela empêchera les autres utilisateurs de soumettre des demandes en leur nom, mais pas les demandes de contrefaçon.

L’application qui utilisera ce service est une application iPhone. J’imaginais donc qu’une clé publique pourrait être intégrée à l’application, avec laquelle nous pourrions faire une signature supplémentaire, mais est-ce que cela signifie que nous devrons en avoir deux? signatures, une pour la clé d'utilisateur et une pour la clé d'application?

Tout conseil serait grandement apprécié, j'aimerais bien que tout soit clair du premier coup.

Était-ce utile?

La solution

Je pense que le moyen le plus simple de faire ce droit serait d'utiliser l'authentification client HTTPS. Le site d'Apple contient un fil sur ce sujet même.

Éditer: pour gérer les autorisations, je créerais une ressource distincte (URI) sur le serveur pour chaque utilisateur et ne permettrais à cet utilisateur (authentifié) de manipuler cette ressource.

Edit (2014): Apple a modifié son logiciel de forum au cours des six dernières années; le fil de discussion se trouve maintenant à l'adresse https://discussions.apple.com/thread/1643618

Autres conseils

La réponse est simple: cela ne peut être fait. Dès que vous envoyez une solution à l'utilisateur final, celui-ci peut toujours attaquer le serveur avec lequel il communique. La version la plus courante de ce problème est de tricher avec des listes de scores élevés dans les jeux Flash. Vous pouvez le rendre plus difficile en incorporant une sorte de cryptage dans le client et en obscurcissant le code ... Mais tout code compilé et obfusqué peut toujours être décompilé et non obscurci. C’est une question de temps et d’argent que vous êtes prêt à dépenser, ainsi que pour l’attaquant potentiel.

Votre préoccupation est donc pas de savoir comment empêcher l'utilisateur d'envoyer des données erronées à votre système. C’est comment empêcher l’utilisateur de endommager votre système. Vous devez concevoir vos interfaces de manière à ce que tout dommage causé par des données erronées n’affecte que l’utilisateur qui les envoie.

Qu'est-ce qui ne va pas avec Authentification HTTP Digest ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top