14 votes

Pour un scénario d'authentification unique hybride utilisant le SDK iOS Facebook, quelle est la meilleure façon de générer un mot de passe/clé pour nos propres enregistrements personnalisés d'utilisat

Donc mon intention est d'avoir une connexion dans mon application iOS qui permet soit notre inscription standard par email/mot de passe, soit la connexion avec Facebook. Nous créons également des services REST pour obtenir des informations sur l'application pour un utilisateur donné, par exemple https://url/getPosts/\[userId\]?userPwd=foo

J'ai déjà mis en place un SSO avec Facebook dans une application web mais j'ai quelques préoccupations concernant la sécurité de l'authentification dans un scénario client iOS. La différence clé par rapport à ce que j'ai fait auparavant est qu'avec une application web, je faisais un appel serveur à serveur à Facebook pour obtenir le jeton d'accès, ce qui me permettait de m'assurer raisonnablement que l'utilisateur était authentifié et que le serveur web effectuait des appels privilégiés à la base de données. Dans le cas d'iOS, c'est l'application client mobile qui effectue la demande d'authentification iOS Facebook par elle-même et le serveur doit d'une manière ou d'une autre avoir confiance que cet utilisateur de l'application client est effectivement authentifié par rapport à l'enregistrement utilisateur correspondant dans notre base de données.

Ma question est comment générer une clé unique durable et secrète à partir du SDK iOS afin de pouvoir créer et associer un enregistrement utilisateur correspondant dans notre base de données pour les utilisateurs qui s'authentifient uniquement avec Facebook. Je veux que cela se fasse de manière transparente afin que l'utilisateur n'ait pas à remplir manuellement un autre formulaire, et que nous créions automatiquement cet enregistrement utilisateur correspondant dans notre base de données.

Je pourrais insérer un enregistrement dans ma propre table d'utilisateurs lorsqu'ils fbDidLogin avec Facebook, en utilisant l'identifiant Facebook comme identifiant unique et le jeton d'accès fb comme pseudo mot de passe/clé pour mon propre enregistrement utilisateur. Je devrais valider le jeton d'accès avec Facebook pour m'assurer qu'il est valide avant de le sauvegarder comme mot de passe pour l'utilisateur (l'utilisateur ne verrait jamais ce mot de passe, il serait juste transmis par l'application cliente lors des appels API). De cette manière, lorsque l'utilisateur effectue un appel à notre propre API REST via l'application iPhone, nous pouvons authentifier et autoriser en utilisant ce secret/mot de passe/clé.

Une alternative qui rendrait toute cette question obsolète serait de simplement gérer la logique d'autorisation sur l'application cliente et de vérifier s'il y a une session fb valide avant de faire des appels à nos propres APIs que je sécurise avec un seul secret global pour l'application, mais cela ne semble pas aussi sécurisé car obtenir ce seul secret donne l'autorisation d'accéder aux données de tous les utilisateurs. Je préfèrerais autoriser au niveau de chaque utilisateur. Est-ce le bon choix? Suis-je paranoïaque concernant la sécurité iOS?

Le jeton d'accès fb expire donc cela peut ne pas sembler durable, cependant si j'active l'accès hors ligne ce jeton ne sera pas expiré mais générera une fenêtre de dialogue oauth plus effrayante. Une alternative au jeton d'accès est de hacher l'identifiant fb avec une clé secrète d'application sur l'application iOS, et d'utiliser cela comme mot de passe pour l'utilisateur Facebook dans notre base de données. Cependant, encore une fois, il s'agit d'une seule clé secrète qui pourrait peut-être être recompilée à partir de l'application cliente iOS?

13voto

chourobin Points 1147

Conception pour l'authentification Facebook dans une application iOS qui accède également à un service web sécurisé

Ce post m'a aidé à mieux comprendre. Si je ne me trompe pas, le processus se déroule comme suit :

  1. L'utilisateur s'authentifie dans l'application iOS
  2. L'application iOS prend le jeton d'authentification, l'envoie à l'application rails
  3. L'application rails prend le jeton d'authentification et l'envoie à graph.facebook.com/?auth_token=XXX pour récupérer l'utilisateur si l'authentification a réussi.
  4. L'application rails prend les informations de l'utilisateur et correspond/crée l'utilisateur dans sa propre table de base de données. Envoie une sorte de clé d'authentification à l'application iOS.
  5. L'application iOS enregistre la clé d'authentification afin de pouvoir l'utiliser pour communiquer avec l'application rails.

Dites-moi si j'ai oublié quelque chose.

0voto

Charles Dowd Points 351

Avez-vous consulté la documentation iOS pour Single Sign On (SSO)? https://developers.facebook.com/docs/guides/mobile/#ios

Vous pouvez partager un ID d'application entre mobile, canvas et site web et la même authentification utilisateur fonctionne pour chaque environnement.

Jetez un coup d'œil : https://developers.facebook.com/docs/authentication/

La plateforme Facebook propose plusieurs façons d'utiliser les flux OAuth mentionnés dans différents types d'applications, y compris les sites web, les applications sur Facebook.com, les applications mobiles et de bureau.

-3voto

Hardik Soni Points 72

Il vous suffit d'insérer la clé utilisateur Facebook dans votre base de données pour savoir si elle est authentifiée avec Facebook. Utilisez OAuth côté iOS pour authentifier l'utilisateur, prenez la clé secrète de l'utilisateur et envoyez-la à votre service web REST, puis enregistrez-la avec les autres informations de l'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X