Objectif : Permettre à un utilisateur de s'authentifier avec Facebook dans une application iOS qui nécessite l'accès à un service web protégé que j'exécute.
Hypothèses : Un système d'authentification (et d'enregistrement) natif est en place pour les utilisateurs qui choisissent de ne pas utiliser Facebook pour se connecter.
Détails :
- Supposons que nous voulions offrir à un utilisateur la possibilité de se connecter avec Facebook sans créer un compte/crédentiel distinct pour notre système.
- Comme nous prenons en charge notre propre mécanisme d'authentification natif (nom d'utilisateur et mot de passe), nous avons nos propres identifiants d'utilisateur et émettons un jeton d'authentification qui est utilisé pour les interactions ultérieures après la validation initiale des informations d'identification.
Je suis surpris que Facebook ne propose pas de meilleures pratiques à ce sujet dans sa documentation destinée aux développeurs. Toute la documentation existante suppose que vous intégrez l'authentification FB à un site web ou à une application mobile autonome sans service nécessitant une authentification.
Voici mes idées initiales sur la façon dont cela pourrait être conçu, mais je voudrais savoir si elles sont correctes.
-
Le client ouvre la connexion Facebook iOS
-
UI L'utilisateur se connecte avec ses informations d'identification Facebook et obtient un jeton d'accès.
-
L'application iOS transmet le jeton d'accès à notre serveur.
-
Notre serveur communique avec l'API graphique FB en utilisant un jeton d'accès pour (a) valider le jeton et (b) obtenir l'ID utilisateur FB pour ce jeton d'accès.
Par exemple, notre serveur appellerait https://graph.facebook.com/me/?access_token=XYZ qui renvoie les informations sur le profil dans un objet JSON.
-
En supposant qu'il est valide, notre serveur extrait l'ID utilisateur de l'objet JSON et vérifie si l'utilisateur possède déjà un compte. Si c'est le cas, nous émettons notre propre ticket d'authentification au client qui l'utilisera pour cette session. Si l'utilisateur n'a pas de compte, nous en créons un nouveau avec l'ID utilisateur de Facebook, nous lui attribuons notre propre ID utilisateur unique et nous émettons notre ticket d'authentification.
-
Le client renvoie ensuite le ticket d'authentification lors des interactions suivantes qui nécessitent une authentification.
Cela me semble être la bonne approche, mais je ne suis pas sûr de passer à côté de quelque chose d'extrêmement basique et de prendre le mauvais chemin (compliqué).
1 votes
Comment cela a-t-il été résolu ? J'envisage de transmettre également le jeton d'accès et de créer l'utilisateur sur le serveur. Cela semble théorique, mais je demande.
0 votes
C'était ma mise en œuvre en utilisant rails et devise : stackoverflow.com/questions/7232490/
0 votes
Pourquoi ne pas transmettre l'auth_hash complet au lieu de devoir faire deux appels à l'API FB (un depuis l'appareil iOS et un depuis le serveur) ?
1 votes
Que se passe-t-il si vous voulez vous connecter à partir d'un autre appareil (c'est-à-dire si vous n'avez pas votre ticket d'authentification) ? Et si vous venez de recevoir un nouveau ticket d'authentification, qu'est-ce qui empêche quelqu'un de détourner l'identifiant/token facebook en cours de route et de l'utiliser sur son propre appareil ?
0 votes
Par curiosité, à l'étape 5, pourquoi émettre votre propre ticket d'authentification ? Ne pourriez-vous pas utiliser le jeton d'accès Facebook pour chaque appel ultérieur au serveur ? Je me rends compte que cela nécessiterait un appel du serveur à l'API Facebook pour chaque appel app-->serveur et pas seulement pour le premier.