Comment s'assurer que les requests d'API proviennent de notre application mobile (ios / android)?

Nous construisons une application mobile et souhaitons implémenter une sorte d'authentification pour nous assurer que l'API n'est accessible que par notre application. Les users de l'application sont anonymes, sans connection, bien que je les identifie à travers l'identifiant de l'appareil pour maintenir les parameters et autres.

L'approche la plus simple semble générer une key Guid / API que j'envoie avec chaque requête via SSL.

Ce qui m'inquiète, c'est la possibilité qu'une personne malveillante avec beaucoup de time libre télécharge l'application, la décomstack pour get la key de l'API et les requêtes JSON, puis efface ma database de son mieux.

SSL, une key d'API, un ID de périphérique et une API avec des appels aussi restreints que possible sont-ils suffisants? Devrais-je adopter une approche différente? Mes craintes sont-elles fondées ou sans fondement?

N'insérez PAS une seule key d'API dans l'application. Vos préoccupations sont valables quant à l'effet des users malveillants. De plus, vous avez une vulnérabilité sérieuse dans votre configuration actuelle, dans laquelle un user d'API malveillant peut modifier les preferences d'un autre user en fournissant de faux UDID.

Au lieu de cela, créez un service "d'inscription" qui est appelé lors du premier démarrage de l'application sur le périphérique qui génère et renvoie un GUID basé sur l'UDID. Enregistrez le GUID dans les preferences user locales de votre appareil et sur le server. Gardez une trace du GUID et faites le correspondre avec l'UDID sur chaque request sur votre server.

Assurez-vous que tout cela se passe sur SSL.

Avec cette approche, il n'y a pas de key API embeddede pour être abusée. En outre, vous pouvez mettre sur list noire les users abusifs en marquant des combinaisons GUID / UDID et vous pouvez également éliminer votre problème existant de masquage éventuel des appareils enregistrés existants. Toutefois, vous ne pouvez pas empêcher l'logging malveillant de périphériques qui ne sont pas déjà enregistrés auprès de votre service. Ce sera toujours un risque potentiel d'utiliser un identifiant d'appareil comme identifiant d'user.

Il existe des mécanismes d'authentification encore meilleurs et mieux établis qui adoptent une meilleure approche, à savoir. OAuth, JSessionID, etc. que vous devriez jeter un coup d'oeil.

En outre, dans le futur, vous ne devriez pas utiliser l'UDID pour identifier vos users, car leur access a été abandonné. Vous pouvez imiter l'UDID à vos fins en créant un GUID de périphérique personnalisé sur l'appareil lors de l'installation de l'application et en l'enregistrant dans vos preferences user locales.