2010-05-18 8 views
2

Je travaille sur un site où une grande partie des utilisateurs se connectent via Facebook Connect, ils n'ont donc pas de nom d'utilisateur et de mot de passe pour notre site. Nous offrons notre propre API authentifiée par l'utilisateur en utilisant l'authentification de base, mais cela n'autorise pas les utilisateurs de connexion Facebook à s'authentifier auprès des clients utilisant notre API.Autoriser les utilisateurs facebook à se connecter avec d'autres tiers

Y a-t-il un moyen de ne pas enfreindre le TOS de Facebook pour autoriser d'autres tiers à utiliser les identifiants d'authentification Facebook? Par exemple, si l'autre site implémente facebook connect et nous renvoie les données de session? Existe-t-il des exemples dans la nature de Facebook Connect utilisés avec succès par un fournisseur d'API autres que les sites comme Foursquare qui utilisent oAuth comme une solution?

Répondre

4

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.

Questions connexes