Riautenticazione

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.

Nota

Al momento, gli SDK per Android e iOS non supportano la riautenticazione.

Abilitazione della 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:

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' })

Il parametro 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&amp;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.