Vue d'ensemble
Je cherche à créer un (ou de REPOS) de l'API pour mon application. La première/le but principal sera pour la consommation par les applications mobiles (iPhone, Android, Symbian, etc). J'ai été à la recherche dans les différents mécanismes d'authentification et d'autorisation pour les Api web (par l'étude d'autres implémentations). J'ai la tête enroulée autour de la plupart des concepts fondamentaux, mais je suis toujours à la recherche de conseils dans quelques domaines. La dernière chose que je veux faire est de réinventer la roue, mais je n'ai pas trouver de solutions standard qui correspond à mes critères (mais mes critères de mon être erronée, alors n'hésitez pas à la critique en tant que bien). En outre, je tiens à l'API d'être la même pour toutes les plates-formes/applications de la consommer.
oAuth
Je vais aller de l'avant et de jeter mon objection à oAuth depuis que je sais qui va probablement être la première solution proposée. Pour les applications mobiles (ou plus précisément d'applications non web), il semble tout simplement mauvais pour quitter l'application (pour aller à un navigateur web) pour l'authentification. En outre, il n'existe aucun moyen (à ma connaissance) pour le navigateur pour revenir à la fonction de rappel pour l'application (en particulier croix-plate-forme). Je connais un couple d'applications pour le faire, mais il se sent juste mal et donne une pause dans l'application UX.
Exigences
- Utilisateur entre le nom d'utilisateur/mot de passe dans l'application.
- Tous les appels de l'API est identifié par l'application appelante.
- Les frais généraux sont réduits au minimum et la auth aspect est intuitive pour les développeurs.
- Le mécanisme est sécurisé pour l'utilisateur final (leurs identifiants de connexion ne sont pas exposées) ainsi que le développeur (leur demande les informations d'identification ne sont pas exposées).
- Si possible, ne pas exiger https (pas dur).
Mes Pensées Actuelles sur la mise en Œuvre
Un développeur externe d'une demande d'API compte. Ils recevront un apikey et apisecret. Chaque demande nécessite au minimum trois paramètres.
- apikey - développeur à regisration
- timestamp - doubles comme un identificateur unique pour chaque message pour une apikey
- de hachage hachage de l'horodatage + le apisecret
Le apikey est nécessaire pour identifier la demande publication de la demande. L'horodatage agit de même pour la oauth_nonce et évite ou atténue les attaques de relecture. Le hachage garantit que la demande a effectivement été délivré à partir de la propriétaire de l'apikey.
Pour les requêtes authentifiées (ceux effectués sur le compte d'un utilisateur), je suis encore indécis entre aller avec un access_token route ou d'un nom d'utilisateur et le mot de passe de hachage combo. De toute façon, à un certain point, un nom d'utilisateur/mot de passe combo sera nécessaire. Alors, quand il n', un hachage de plusieurs éléments d'information (apikey, apisecret, timestamp) + le mot de passe serait utilisé. J'aimerais des commentaires sur cet aspect. Pour info, ils auraient à hacher le mot de passe en premier, car je n'ai pas stocker les mots de passe dans mon système sans hachage.
Conclusion
Pour info, ce n'est pas une demande de façon à développer la structure de l'API, en règle générale, la façon de gérer l'authentification et l'autorisation de exclusivement au sein d'une application.
Random Thoughts/Bonus De Questions
Pour les Api qui n'exigent qu'un apikey dans le cadre de la demande, comment empêcher quelqu'un d'autre que le apikey propriétaire d'être capable de voir la apikey (depuis envoyées en clair) et de faire trop de demandes pour les pousser au fond des limites d'utilisation? Peut-être que je suis juste sur la pensée, mais ne devrait pas il y avoir quelque chose pour s'authentifier qu'une demande a été vérifiée pour la apikey propriétaire? Dans mon cas, c'était le but de la apisecret, il n'est jamais affichés ou transmis sans être haché.
En parlant de hachages, qu'en md5 vs hmac-sha1? Est-il vraiment important lorsque toutes les valeurs sont hachés avec suffisamment de temps les données (ie. apisecret)?
J'avais déjà été compte tenu de l'ajout d'un utilisateur/ligne de sel à mon mot de passe des utilisateurs de hachage. Si je devais faire, comment pourrait-il être en mesure de créer un condensé correspondant sans le savoir le sel utilisé?