Reautenticação

A reautenticação permite que o seu aplicativo confirme a identidade de uma pessoa, mesmo que tenha sido verificada anteriormente. O Login do Facebook permite que o aplicativo solicite que a pessoa insira novamente a senha do Facebook a qualquer momento. Você pode usar esse recurso para evitar casos em que um usuário deixa um dispositivo conectado ou em que um terceiro sequestra a sessão de alguém com o seu aplicativo.

Os aplicativos devem criar seus próprios mecanismos para alternar entre diferentes contas de usuário do Facebook usando funções de saída e não devem depender de reautenticação para isso.

Nota

No momento, o Android SDK e o SDK do iOS não dão suporte à reautenticação.

Habilitando a reautenticação

Durante o seu fluxo de login, mostraremos como usar o diálogo Entrar e OAuth para autenticar pessoas e para solicitar permissões delas. Para reautenticar, você pode usar essas mesmas etapas com parâmetros adicionais para forçá-la:

Veja um exemplo que usa o SDK do JavaScript que dispara a reautenticação usando um auth_type de reauthenticate:

FB.login(function(response) {
  // Original FB.login code
}, { auth_type: 'reauthenticate' })

O parâmetro auth_nonce

O parâmetro auth_nonce serve como um código alfanumérico totalmente aleatório gerado pelo seu aplicativo. O processo de geração e formatação desse código é totalmente por sua conta. Por exemplo, uma versão com hash de um registro de data e hora e uma cadeia de caracteres pode ser suficiente, desde que seja totalmente exclusiva a cada tentativa de login. Esse valor permite que o seu aplicativo determine se um usuário foi reautenticado.

Será necessário modificar novamente seu fluxo de login para especificar o parâmetro auth_nonce, por exemplo:

FB.login(function(response) {
  // Original FB.login code
}, { auth_type: 'reauthenticate', auth_nonce: '{random-nonce}' })

Para verificar se esse nonce não foi usado antes, você precisa criar uma função para se comunicar com o código que verifica o banco de dados do aplicativo a fim de ver se ele já usou um determinado nonce.

Veja abaixo um exemplo de como usar JavaScript (com a estrutura jQuery) e PHP como um guia que você pode adaptar de acordo com a sua própria configuração específica. Para nosso exemplo, usaremos uma cadeia de caracteres codificada como o nonce. É preciso substituí-la por uma chamada dinâmica para um nonce gerado.

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: esse arquivo PHP apenas indica, e não inclui, o trecho de código que compararia o nonce fornecido com o banco de dados do aplicativo. É preciso personalizá-lo para o seu próprio banco de dados e ambiente de código:

<?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) &#123;
      // 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';
   }
?>

Nesse exemplo, a função de JavaScript checkNonce() seria chamada após o recebimento da resposta do token de acesso do diálogo de login de reautenticação. Como usar o SDK do JavaScript como exemplo:

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

Note que auth_nonce é uma parte opcional da reautenticação. Contudo, incentivamos que os aplicativos o utilizem, principalmente ao solicitar reauthenticate como auth_type.