3. Une panoplie de réseaux
sociaux
• Plus de 1 milliard de sites internet dans le monde
•68% des internautes sont actifs sur les réseaux
sociaux en 2015
•Facebook, Twitter, Google+,Github, Instagram,
LinkedIN, Viadeo, Twitch… des réseaux sociaux en
masse !
3
4. Comment gérer simplement la connexion
des différents réseaux sociaux sur une
application Angular ?
4
5. Sommaire
• Chemin d’une connexion avec un réseau social
•Satellizer : configurer les connexions en un seul
endroit
• Connexion côté backend
•Echanges connectés entre backend et frontend
5
7. Des connexions Cross Domain
Appli frontend sur un
serveur A
(Angular)
http://frontend.com
Appli backend sur un
serveur F
(ZF2)
http://backend.com
• Cross Domain : venant de noms de domaine différents
Chemin de connexion > Satellizer > Backend > Echanges
Que se passe-t-il si je clique
sur un de ces logos ?
7
8. Que se passe-t-il si je clique ?
Utilisateur
Appli frontend sur un
serveur A
(Angular)
Clique sur logo Facebook
Voici mon id d’app facebook
Peux tu authentifier cet internaute ?
Qui es-tu et autorises tu
cette appli à accéder à tes infos ?
1
2
3
5
Voici son id et un code pour demander des infos
Login mp et accepter
4
Appli backend sur un
serveur B
(ZF2)
7
Voici le code et ma clé secrète (fournie par facebook),
qui est l’utilisateur derrière cet id utilisateur ?
8
Il s’agit de …..
JWT
6
On le connaît ?
9
Chemin de connexion > Satellizer > Backend > Echanges
8
9. Un JWT ?
• Json Web Token : « passeport » de l’utilisateur
Appli frontend sur un
serveur A
(Angular)
http://frontend.com
Appli backend sur
un serveur C
(php Zf2)
http://backend.com
Appli backend sur
un serveur F
(NodeJS)
JWTJWT
JWT
Chemin de connexion > Satellizer > Backend > Echanges
9
10. JWT : une structure définie
{ "alg" : "HS256",
"typ" : "JWT,
"iss" : http://backend.com,
"aud" : http://frontend.com,
"iat" : strtotime("now"), //date de création du token
"exp" : 5000+ strtotime("now"), //temps de validité du token
"sub" : "description of the token",
"nbf" : strtotime("now") + $this->nbf,//invalide avant cette date
'context' : $context //infos diverses (utilisateur par exemple)
}
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIiLCJhdWQiOiIiLCJpYXQiOjE0NjE2NzU4MzMsI
mV4cCI6MTQ2MjAwODIzMywic3ViIjoiZGVzY3JpcHRpb24gb2YgdGhlIHRva2VuIiwibmJmIjoxNDYxN
jc1ODMzLCJjb250ZXh0Ijp7InNDbGllbnROYW1lIjoic3VwZXJhdXRvIiwic0NmYUxpYmVsbGUiOiIiLCJz
Um9sZSI6IndlYnNpdGUifX0.N3YxMuXn_RsvfJHq3a64oZQgG5c3M3r2mzNzdiR47TE
Chemin de connexion > Satellizer > Backend > Echanges
• RFC 7519 : Json Web Token
•Crypté en base 64 en 3 parties
10
11. Déclarer notre app sur Facebook
•https://developpers.facebook.com
•Ajouter votre appli en tant que site web
Chemin de connexion > Satellizer > Backend > Echanges
11
12. Déclarer notre app sur Facebook
•Paramètres > ajouter une plateforme > site web
•Puis indiquer nom de domaine et ip serveur (Avancé)
Chemin de connexion > Satellizer > Backend > Echanges
12
13. •Examen des app > Rendre frontend publique
Déclarer notre app sur Facebook
•La procédure est similaire sur les autres
•ATTENTION : certaines n’acceptent pas “.localhost”
Chemin de connexion > Satellizer > Backend > Echanges
13
22. Backend : Vérifier et générer
•Cross domain
header('Access-Control-Allow-Origin: ' . 'http://frontend.com');
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header('Access-Control-Allow-Headers: Content-Type, x-xsrf-token,x-session-token,Authorization');
header('Access-Control-Allow-Credentials: true');
FacebookController
1
2
3
Récupérer les paramètres (code et id client)
Demander un token à Fb avec la clé secrète
Récupérer les infos utilisateurs via l’api facebook
4 Traiter les infos utilisateurs
5 Générer un JWT
6 Retourner le JWT ainsi que des infos
en clair (nom utilisateur…)
22
Chemin de connexion > Satellizer > Backend > Echanges
33. Aller plus loin
•Regarder les fichiers de démo sur le github de
satellizer (très bien faits et doc très claire !)
•Penser à relier les comptes en base avec les ids
des réseaux sociaux
•Détruire le JWT dans le localStorage à la
deconnexion
•Ne pas oublier que l’on peut utiliser plusieurs
backend donc plusieurs applis avec le JWT !
33
34. Conclusion
• Les réseaux sociaux ont une façon similaire de
proposer l’authentification
•Très simple de centraliser les connexion avec
Satellizer
34
35. Sources et webographie
•Site dédié aux JWT : documentations, librairies, debuger...
https://jwt.io/introduction/
•RFC 7519 : Json Web Token
https://tools.ietf.org/html/rfc7519
•Tuto angular et JWT
http://www.ekino.com/introduction-aux-json-web-tokens/
• Nombre de sites internet dans le monde
http://hitek.fr/bonasavoir/combien-site-internet-dans-monde_588
• Pourcentage d’actifs sur réseaux sociaux
http://www.blogdumoderateur.com/chiffres-reseaux-sociaux/
•Scratchpad angular contenant l’authentification par réseau social
https://github.com/Lymke/angular-scratchpad
35
36. Merci pour votre écoute
Si vous avez des questions, je
peux peut-être y répondre :)
36