Question Laravel 5.3 - Doutes de connexion sociale


Je développe une application mobile et dépend actuellement de JWT pour maintenir l’apatridie de l’API. L'API est consommée par les périphériques mobiles et Web. Les utilisateurs utiliseront leur adresse e-mail et leur mot de passe pour s'inscrire.

Je suis affecté à l'implémentation de l'option de connexion sociale dans cette API. Je voudrais effacer mes doutes suivants.

1) Lorsque Social Login est utilisé, comment puis-je générer un jeton [comme JWT] qui sera stocké à la fin du client? Ce jeton est supposé envoyer avec toutes les requêtes suivantes après la connexion.

2) Dans le cas où les plates-formes sociales ne fournissent / partagent pas d'adresse e-mail [qui est l'une de nos clés primaires], quelles informations dois-je stocker?


11
2018-02-19 12:38


origine


Réponses:


RÉPONSE COURTE

  1. Vous devez lier l'utilisateur de connexion sociale à votre table utilisateur standard et générer le jeton (JWT) comme vous le faites déjà
  2. Les connexions sociales renvoient toujours un identifiant identifiant l'utilisateur sur le social. Dans une table externe, stockez le social utilisé et le social_id, ainsi que le user_id de votre table d'utilisateurs principale

LONGUE RÉPONSE

Commençons par le début afin d'avoir une meilleure vision de toutes les questions et de clarifier tous les aspects de vos doutes.

Tableau utilisateur de base
Vous avez généralement un tableau Utilisateurs structuré de cette manière (simplifié)

  • identifiant d'utilisateur
  • Pseudo (email)
  • mot de passe
  • jwt_token

Lorsque l'utilisateur se connecte, vous allez mettre à jour le champ jwt_token et le renvoyer à l'utilisateur afin de consommer vos API.

Implémenter des connexions sociales
Une bonne approche pour ajouter des connexions sociales consiste à créer une nouvelle table social_logins structurée comme suit (simplifié)

  • social
  • social_id
  • identifiant d'utilisateur

Une fois que vous avez "connecté socialement" un utilisateur, vous obtenez une liste de données du réseau social lui-même. Notez que les utilisateurs peuvent interdire la récupération de l'adresse e-mail privée (par exemple, à partir de Facebook), même si vous le demandez explicitement.

La première chose à faire est de vérifier si le social vous a renvoyé l'adresse email de l'utilisateur.

  • si un e-mail est renvoyé, recherchez un utilisateur avec cette adresse e-mail dans votre table d'utilisateurs et créez un enregistrement dans le tableau "social_logins" en créant une relation avec l'utilisateur à l'aide du champ user_id
  • Si l'e-mail est vide, vous devez créer un nouvel utilisateur dans la table utilisateur en créant une "fausse" adresse e-mail (avec une méthode standard - pas aléatoire), puis créez votre enregistrement social_login.

Pour éviter de créer des utilisateurs doubles (adresses e-mail différentes), je préfère toujours demander à l'utilisateur de confirmer son adresse e-mail: avec cette simple question, vous pouvez reporter la vérification précédente et réduire le nombre d'utilisateurs doubles. Ainsi, si le login social ne vous renvoie pas l'adresse e-mail, vous affichez simplement un champ vide demandant aux utilisateurs de le remplir avec leur adresse e-mail que vous utiliserez ensuite pour rechercher un utilisateur dans la table users. Si au contraire vous l'avez reçu, montrez simplement à l'utilisateur le même champ rempli et demandez-lui de confirmer l'adresse e-mail ou modifiez-le s'il préfère utiliser une autre adresse ou s'il est déjà inscrit à votre application avec une autre adresse e-mail.


1
2018-02-28 16:09



Certains réseaux sociaux permettent de déléguer l'authentification des utilisateurs à la place ou d'exiger des informations d'identification dans votre propre système. Lorsque l'utilisateur se connecte, la plate-forme externe vous fournit un jeton d'accès qui peut être utilisé pour obtenir des informations sur l'utilisateur.

Utilisez ces données pour enregistrer l'utilisateur dans votre propre système. Joignez également le jeton d'accès fourni. Selon les autorisations que vous avez demandées, vous pouvez utiliser le jeton pour effectuer des opérations supplémentaires sur la plateforme sociale.

Ensuite, émettez un JWT à utiliser comme jeton d'authentification dans l'application Web / mobile où l'utilisateur s'est connecté. Notez que ce JWT doit être indépendant du jeton d'accès envoyé par le fournisseur d'authentification. Inclure des revendications d'intérêt comme sub ou exp et signez-le avec une clé secrète. Par exemple

 {
   "sub": "userid",     //unique user id assigned in your system 
   "name": "User name"  //Name provided by social 
   "iss": "issuer",     //you are the issuer
   "exp": 1300819380,   //Expiration date
   "login":"facebook"   //login method used
  }

Si vous prévoyez d'utiliser plusieurs systèmes d'authentification tels que Google ou Facebook, n'utilisez pas l'e-mail comme identifiant unique car il pourrait être différent pour le même utilisateur. Vous aurez besoin d'un processus d'enregistrement supplémentaire pour relier les comptes que l'utilisateur possède sur différents réseaux. Par exemple, laisser l'utilisateur définir l'identificateur utilisé dans l'autre système ou lancer le processus de connexion dans Twitter lorsque l'utilisateur est connecté par Facebook


0
2018-02-28 16:46