La nouvelle authentification permet à votre app de confirmer l’identité d’une personne, même si elle a été vérifiée précédemment. Facebook Login permet à votre app de demander à une personne de ressaisir son mot de passe Facebook à tout moment. Cette option permet d’éviter qu’une personne quitte un appareil connecté ou qu’un tiers pirate la session ouverte par un utilisateur avec votre app.
Les apps doivent créer leurs propres mécanismes de basculement entre différents comptes d’utilisateur Facebook à l’aide des fonctions de déconnexion et ne doivent pas compter sur la nouvelle authentification pour cela.
À l’heure actuelle, les SDK pour Android et iOS ne prennent pas en charge la nouvelle authentification.
Pendant votre processus de connexion, nous vous indiquons comment utiliser la boîte de dialogue Login et le protocole OAuth pour authentifier une personne et lui demander des autorisations. Pour effectuer une nouvelle authentification, vous pouvez suivre les mêmes étapes avec des paramètres supplémentaires pour la forcer :
auth_type
: ce paramètre spécifie les fonctionnalités d'authentification demandées (sous la forme d’une liste séparée par des virgules). Les options valides sont les suivantes :reauthenticate
: demande à l’utilisateur d’effectuer une nouvelle authentification sans condition
auth_nonce
: comprend un nonce alphanumérique généré par une application pouvant être utilisé pour assurer une protection contre les attaques par relecture. Consultez la page décrivant comment vérifier une auth_nonce
pour en savoir plus.
L’exemple suivant utilise le SDK JavaScript qui déclenche une nouvelle authentification à l’aide du paramètre auth_type
de reauthenticate
:
FB.login(function(response) { // Original FB.login code }, { auth_type: 'reauthenticate' })
auth_nonce
Le paramètre auth_nonce
est conçu pour être un code alphanumérique généré de manière totalement arbitraire par votre app. Le processus de génération de ce code et son format dépendent entièrement de vous. Par exemple, une version chiffrée d’un horodatage et une chaîne secrète peuvent suffir tant qu’elles sont intégralement propres à chaque tentative de connexion. Cette valeur permet à votre application de déterminer si un utilisateur a été authentifié à nouveau.
Vous devrez modifier à nouveau votre processus de connexion pour spécifier le paramètre auth_nonce
, par exemple :
FB.login(function(response) { // Original FB.login code }, { auth_type: 'reauthenticate', auth_nonce: '{random-nonce}' })
Afin de vérifier que cette valeur unique n’a pas été utilisée auparavant, vous devez créer une fonction de communication avec le code qui vérifie la base de données de votre app pour savoir si elle a déjà utilisé une valeur unique particulière.
Voici un exemple reposant sur JavaScript (avec la structure jQuery) et PHP que vous pouvez adapter à votre propre configuration. Pour notre exemple, nous allons utiliser une chaîne figée dans le code en tant que valeur unique. Vous devez remplacer cela par un appel dynamique vers une valeur unique générée.
function checkNonce(access_token) { $.post('checkNonce.php', {access_token: access_token}, function(data) { if (data == 1) { console.log('The user has been successfully re-authenticated.'); FB.api('/me', function(response) { console.log('Good to see you, ' + response.name + '.'); }); } else { console.log('The nonce has been used before. Re-authentication failed.'); } }); }
Remarque : ce fichier PHP représent uniquement et n'inclut pas l’extrait de code permettant de comparer le nonce fourni à la base de données de l'application. Vous devez l’adapter à votre propre environnement de base de données et de code :
<?php $access_token = $_REQUEST['access_token']; $graph_url = 'https://graph.facebook.com/oauth/access_token_info?' . 'client_id=YOUR_APP_ID&access_token=' . $access_token; $access_token_info = json_decode(file_get_contents($graph_url)); function nonceHasBeenUsed($auth_nonce) { // Here you would check your database to see if the nonce // has been used before. For the sake of this example, we'll // just assume the answer is "no". return false; } if (nonceHasBeenUsed($access_token_info->auth_nonce) != true) { echo '1'; } else { echo '0'; } ?>
Dans cet exemple, la fonction JavaScript checkNonce()
serait appelée après avoir reçu la réponse du token d'accès de la boîte de dialogue de connexion d’une nouvelle authentification. Utilisation du SDK JavaScript à titre d’exemple :
FB.login(function(response) { if (response.authResponse) { // Login success, check auth_nonce... checkNonce(response.authResponse.access_token); } else { // User cancelled } }, { auth_type: 'reauthenticate', auth_nonce: '{random-nonce}' })
Notez que le paramètre auth_nonce
est un élément facultatif de la nouvelle authentification. Nous vous encourageons toutefois vivement à l’utiliser dans vos apps, en particulier lorsque vous demandez le paramètre reauthenticate
en tant que auth_type
.