Bonjour à tous,
J'ai un problème assez spécifique à résoudre. Je me suis permis de le poster dans la rubrique "scripts" du forum PHP car il traite du PHP-SDK de Viadéo.
En effet je travaille actuellement sur un module d'authentification via les réseaux sociaux (OAuth2) (Facebook, Twitter, Google+, LinkedIn, et Viadéo). Ce module est intégré à une plateforme web. Pour ceux qui ont déjà eu l'occasion de mettre ceci en oeuvre, vous devez donc savoir que dans chaque cas un SDK à télécharger est disponible pour chaque service dans des langages divers (si pas de SDK, des exemples de scripts d'utilisation sont fournis). Ma plateforme web étant développée en PHP, j'ai donc opté pour les SDK's PHP (logique). En ce qui concerne Facebook, Twitter, Google+ et LinkedIn, mon module fonctionne normalement. Le process suivi est le suivant : Chargement de la page->redirection vers la page d'authentification du réseau social->connection accordée->redirection vers la page de mon site->récupération des infos->cloturation de la connection vers le réseau social->démarrage de la session (identifiée) sur ma plateforme.
Voici donc le problème rencontré: Lorque l'on se retrouve sur la page d'authentification de Viadéo, ceux-ci créent un cookie qui permettra à l'utilisateur de ne plus devoir s'authentifier par la suite. Ce n'est pas grave en soi, mais je trouve ça très gênant dans le cas où un utilisateur se connecte sur ma plateforme via Viadéo à partir d'un cybercafé par exemple ou de toute autre machine accessible de manière publique... En effet, une fois l'authentification effectuée, même si l'utilisateur se déconnecte de ma plateforme, le cookie de connection Viadéo est présent sur la machine et de ce fait connecte de manière automatique à ma plateforme le dernier utilisateur loggué. Au niveau de la sécurité c'est donc un problème majeur !
Je lance donc un appel de détresse à tous ceux qui ont déjà été confronté à ce problème avec ce SDK !
J'ai relu la doc (en anglais) et il me semble avoir correctement utilisé les classes mises à disposition.
Voici ce que préconise viadéo concernant l'utilisation de son SDK:
http://dev.viadeo.com/documentation/...mples/php-sdk/
http://dev.viadeo.com/documentation/...sdk-reference/
Voici l'extrait de code que j'ai intégré à mon module:
Le fichier viadeoapi.inc.php est le fameux SDK fourni par Viadéo, celui-ci est disponible en téléchargement sur leur plateforme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 <?php include 'lib/viadeoapi.inc.php'; // Fonction de formation de l'url permettant la révocation du jeton d'accès. function revoke_access_token($access_token){ $url = 'https://secure.viadeo.com/oauth-provider/revoke_access_token2?'; $url.= 'client_id=<CLIENT_ID>&'; $url.= 'client_secret=<CLIENT_SECRET>&'; $url.= 'redirect_uri=<REDIRECT_URI>&'; $url.= 'access_token='.$access_token; return $url; } $viadeo = new ViadeoAPI(); $viadeo->init(array( 'store' => false, 'client_id' => <CLIENT_ID>, 'client_secret' => <CLIENT_SECRET> )); // Manage with disconnect ----------------------------------------------------- if (isset($_REQUEST['disconnect']) && ($_REQUEST['disconnect'] == 'true')) { $access_token = $viadeo->getAccessToken(); $viadeo->disconnect(); echo "You've been disconnected, "; echo "<a href='".revoke_access_token($access_token)."'>reconnect</a>"; // ViadeoHelper::getCurrentURL() exit(0); } if(isset($_GET['code'])){ $viadeo->setAuthorizationCode($_GET['code']); $viadeo->setAccessTokenFromCode(); }else{ $viLoginUrl = $viadeo->getAuthorizationURL(); } if($viadeo->isAuthenticated()){ try{ $me = $viadeo->get('/me')->execute(); print '<pre>'; print_r($me); print '</pre>'; print '<br />'; echo "<a href='".ViadeoHelper::getCurrentURL()."?disconnect=true'>Se déconnecter</a><br/>"; }catch(ViadeoAPIException $e){ echo "Erreur de l'API Viadeo."; }catch(ViadeoAuthenticationException $f){ echo 'Erreur : '.$f->getMessage(); } } ?> <?php if(isset($viLoginUrl)) :?> <a href="<?php echo $viLoginUrl ?>">Se connecter avec Viadeo</a> <?php endif ?>
Dans le script ci-dessus, j'ai essayé en vitesse de créer d'une fonction permettant de former une url pour révoquer le jeton d'accès pensant que ça résoudrait le problème (c'était dans un élan de désespoir !) mais bien évidemment ça n'a pas dégagé le cookie qui malgrè tout, s'évertue à reconnecter le dernier utilisateur...
Si quelqu'un a une solution ou une piste à laquelle je n'aurai pas songé je suis preneur !
Merci à ceux ou celles qui auront pris le temps d'aller jusqu'au bout de ce long post.
Cordialement.
Partager