2010-08-01 10 views
3

J'ai créé une application Web et maintenant je souhaite créer des API REST pour la rendre programmable par des développeurs tiers. Ensuite, je veux construire quelques bibliothèques clientes dans des langages populaires (JavaScript, PHP, Ruby, etc) pour rendre les devs confortables en utilisant mon service en leur évitant d'analyser à la main la réponse JSON de chaque requête.Création d'une authentification API REST valide

Je n'ai jamais construit d'infrastructure API auparavant, j'ai donc la question suivante. J'aimerais suivre l'utilisation des méthodes d'API appelées par des développeurs tiers. Chaque développeur, avant de consommer les API, doit être enregistré et je veux donc associer chaque requête au développeur enregistré (et ainsi, définir des limites d'utilisation spécifiques, etc.).

J'ai pensé créer une clé api unique pour chaque développeur qu'il pourrait utiliser dans toutes ses applications, afin d'authentifier les requêtes. Mais alors je me suis rendu compte que s'il décidait d'utiliser mon wrapper javascript, les utilisateurs malveillants pourraient voir le code source de la page de l'application cliente et récupérer sa clé api. J'ai donc décidé qu'il serait préférable de créer une clé API unique pour chaque application, associée au domaine où l'application client serait hébergée. Donc, même si un utilisateur saisit une autre clé, il serait inutile en dehors du domaine où il a été initialement enregistré. Mais alors j'ai pensé: qu'en est-il des applications mobiles? Que se passe-t-il si l'appel ne provient pas d'un site Web? Comment puis-je authentifier la clé via son domaine s'il n'y a pas de domaine ou si l'adresse IP n'est pas statique?

Des conseils?

Merci!

Répondre

1

Marco. Vous n'êtes pas sûr de continuer à travailler dessus, mais juste au cas où: Si votre but principal est le suivi de l'utilisation de l'API provenant de différents sites, vous avez raison d'attribuer une clé API unique par développeur. Cependant, dans le cas de JavaScript, la requête ne proviendra pas de ce développeur. il proviendrait de l'ordinateur de l'utilisateur final (en supposant que vous utilisiez JSONP pour contourner la politique du même domaine en JavaScript). Vous pourriez être en mesure d'appliquer votre restriction de domaine en utilisant le HTTP_REFERER (c'est-à-dire que vous obtenez une requête de 1.2.3.4.comcast.net, mais son HTTP_REFERER est www.developer.com) mais évidemment un utilisateur malveillant déterminé pourrait usurper ce REFERER.

Une autre option pourrait être d'éviter JSONP et de faire venir la bibliothèque JavaScript avec un proxy local. Ainsi, les appels AJAX iraient du navigateur de l'utilisateur au serveur du développeur (validé avec un cookie/miette de session), puis le serveur du développeur contacte votre serveur (qui peut être facilement restreint par IP et/ou utiliser une authentification forte).

Espérons que ça aide.

Questions connexes