33 votes

Sécurisé API RESTful qui peut être utilisé par les Web App (angulaire), iOS et Android

Je dois établir un plan pour développer une API RESTful (Python/Flacon), qui pourraient être utilisés par notre future application web (Angularjs) et d'applications mobiles (iOS/Android).

J'ai cherché pendant trois jours, et viennent à travers plusieurs scénarios: À l'aide de HTTPS est un chemin sur le dessus des méthodes ci-dessous pour maintenir la sécurité. Mais le https est plus lent, ce qui pourrait signifier que nous avons besoin de plus rapide et plus coûteux serveurs.

  1. L'aide de la Base-Http-Auth et de l'envoi du nom d'utilisateur/mot de passe en clair (encore https) sur le fil pour chaque requête à l'API.
  2. À l'aide de Digérer-Auth, qui est un hachage du mot de passe et le suivi peut être automatique, Ce serait de travailler pour l'application web, cependant je n'étais pas en mesure de confirmer si les iPhones et Android serait en charge de ce mode natif. S'ils le font, cela pourrait être une solution facile!
  3. À l'aide d'un en-tête http personnalisé, où je voudrais envoyer un personnalisé Auth chaîne de caractères dans l'entête http, sur une authentification réussie. Mais puis-je m'assurer que je suis à l'envoi de ce code d'autorisation pour chaque demande que fait l'utilisateur. Cela fait exactement comme 1) avec la différence que la simple mot de passe ne sont pas utilisés et le auth code peut expirer sans aucun risque. Aussi problématique est le suivi de l'auth code, qui n'est plus automatisé comme en 2)
  4. En utilisant OAuth est une option. Mais il est assez difficile à mettre en place. Si il n'y a pas de meilleure façon, peut-être que c'est le seul moyen?
  5. La sécurisation de l'API comme Amazon S3 comme décrit dans cet excellent article. En bref, il dit que le serveur et le client sait d'une clé privée, qu'ils pourraient utiliser pour hacher la communication. Il sera comme un gangster poignée de main, que vous ne feriez confiance au garçon de livraison, s'il connaît le gangsta poignée de main. Plus bas dans les commentaires que quelqu'un demande:

Comment garder la clé privée "sécurisé" dans un pur HTML5 app ?

Vous êtes au bon endroit; dans un pur HTML5 (JS/CSS/HTML) app, il n'y a pas de protection de la clé. Vous feriez toutes les communications par HTTPS auquel cas vous n'auriez pas besoin d'une clé que vous pouvez en toute sécurité identifier un client à l'aide d'un API_KEY ou certains autres identificateur de sans la nécessité ou de la complexité d'un algorithme HMAC.

Donc, en d'autres termes il n'y a même pas de point de l'utilisation de la méthode pour une application web en premier lieu. Et honnêtement, je ne comprends pas comment cela doit fonctionner sur votre appareil. Un utilisateur télécharge notre application et comment dois-je envoyer la clé privée de l'iphone sur le serveur? Le moment où j'ai transféré, il sera compromise.

Le plus je suis à la recherche de la plus indécise que je suis se.

J'espérais pour lui poser quelques pros qui ont fait cela auparavant et ont pu partager leur expérience. Merci Beaucoup

1voto

Andrew Theis Points 748

Aller avec le protocole HTTPS. C'est (un peu) plus lent, mais la sécurité que vous obtenez à partir d'elle, à relativement court de l'investissement de temps (achat de la SSL cert et simplement changer votre Url http vers https) en vaut la peine. Sans HTTPS, vous courez le risque de vos utilisateurs, les sessions se détourné non garantis par des réseaux publics, ce qui est extrêmement facile pour quelqu'un pour le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X