J'ai développé une telle fonctionnalité pour mon application. L'utilisateur peut se connecter sur Facebook avec Facebook ou Twitter et s'authentifier de la même manière sur notre API à partir de l'application iPhone/Android.
Je ne suis pas sûr que ma méthode est la meilleure, c'est pourquoi je asked the question sur ce qui pourrait être la meilleure approche. Pourtant, je vais expliquer ce que je fais et jusqu'à présent cela fonctionne très bien. D'abord, vous devez implémenter une méthode login
dans votre API. Cette méthode échange vos informations d'identification contre un jeton d'API qui sera ensuite utilisé pour tous les futurs appels.
Voici l'appel API login
avec vos paramètres d'authentification de base:
http://login:[email protected]/login
(c'est juste une représentation de vous expliquer envoyez les informations d'identification, pas la façon réelle de le faire)
En retour, cet appel API vous envoie le côté api_token
{ "api_token": "xxxx-xxxx-xxxx-xxxx" }
Server, vous avez une table associant api_token
et user_id
(ainsi que la date d'expiration en cas de besoin, etc.)
Vous utiliserez ensuite api_token
chaque fois que vous devez effectuer un appel authentifié:
http://api.myapp.com/request?api_token=xxxx-xxxx-xxxx-xxxx
Maintenant que vous avez modifié votre implémentation d'authentification , vous ferez exactement la même chose avec le Facebook access_token
renvoyé par le Facebook Connect SDK. Vous échanger des jetons en utilisant l'appel API suivantes:
http://api.myapp.com/login/facebook?access_token=<facebook_access_token>
côté serveur, vous vérifiez la validité du access_token
avec un simple
wget -qO- https://graph.facebook.com/me?access_token=<facebook_access_token>
Ce qui vous renvoie un JSON avec toutes les informations utilisateur, y compris Facebook ID de l'utilisateur . En supposant que l'utilisateur a déjà connecté son compte à Facebook, vous pouvez rechercher le user_id
et renvoyer un api_token
.
Le problème est que si l'utilisateur rejette votre application de Facebook, cela n'aura aucun effet sur le api_token
et l'utilisateur aura toujours accès à l'API. Il pourrait aussi y avoir des problèmes de sécurité (https serait certainement mieux de protéger le jeton d'accès facebook de l'utilisateur).
Je ne peux pas garantir la beauté de cette méthode, mais cela fonctionne et peut être utilisé avec de nombreux autres fournisseurs. Comme le jeton d'accès Facebook reste dans le même écosystème, je suis à peu près sûr que cela ne viole pas les conditions d'utilisation de Facebook. Je n'ai rien lu là-bas regardant contre.