La riautenticazione consente alla tua app di confermare l'identità di un utente anche se già verificata in precedenza. Facebook Login permette all'app di chiedere a un utente di reinserire la sua password di Facebook in qualsiasi momento, operazione utile per evitare i casi in cui l'utente mantiene l'accesso a un dispositivo o in cui una sessione è violata da terzi.
Le app devono poter passare da un account Facebook all'altro attraverso la funzione di uscita e non attraverso la riautenticazione.
Al momento, gli SDK per Android e iOS non supportano la riautenticazione.
Durante il flusso di accesso ti mostriamo come usare la finestra di dialogo Accedi e OAuth per autenticare un utente richiedendo le autorizzazioni. Per effettuare la riautenticazione, puoi seguire questi passaggi con parametri aggiuntivi per forzarla:
auth_type
: questo parametro specifica le opzioni di autenticazione richieste (come lista separata da virgole). Le opzioni valide sono:reauthenticate
: chiede all'utente di riautenticarsi senza condizioni.
auth_nonce
: include un nonce alfanumerico creato dall'app, che può essere usato per offrire protezione di riproduzione. Per ulteriori informazioni, consulta come controllare un auth_nonce
.
Questo esempio sfrutta l'SDK JavaScript per avviare il processo di riautenticazione attraverso un auth_type
di reauthenticate
:
FB.login(function(response) { // Original FB.login code }, { auth_type: 'reauthenticate' })
auth_nonce
Il parametro auth_nonce
è un codice alfanumerico arbitrario creato dall'app. Il processo di creazione e il formato di questo codice dipendono interamente da te. Ad esempio, potrebbero essere sufficienti una marca temporale con hash e una stringa segreta, purché diversi per ogni tentativo di accesso. Questo valore consente alla tua app di determinare se un utente è stato riautenticato.
Dovrai modificare nuovamente il flusso di accesso per specificare il parametro auth_nonce
, ad esempio:
FB.login(function(response) { // Original FB.login code }, { auth_type: 'reauthenticate', auth_nonce: '{random-nonce}' })
Per controllare che il nonce non sia stato già usato, dovrai creare una funzione che comunichi con il codice per controllare il database dell'app e verificare se ha già usato un determinato nonce.
Di seguito è riportato un esempio che sfrutta JavaScript (con il framework jQuery) e PHP, che puoi usare come guida da adattare alla tua configurazione. Useremo una stringa con codifica fissa come nonce, sostituiscila con una chiamata dinamica a un nonce già creato.
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.'); } }); }
Nota: questo file PHP implica e non include lo snippet di codice che confronta il nonce con il database dell'app. Dovrai adattarlo al tuo database e all'ambiente del codice:
<?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'; } ?>
In questo esempio, la funzione JavaScript checkNonce()
viene chiamata dopo aver ricevuto la risposta del token d'accesso dalla finestra di dialogo di accesso per la riautenticazione. Uso di SDK JavaScript come esempio:
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}' })
auth_nonce
è un componente facoltativo del processo di riautenticazione. Tuttavia, suggeriamo di usarlo, specialmente alla richiesta di reauthenticate
reauthenticate come auth_type
.