재인증

재인증을 사용하면 이미 사용자의 ID가 인증된 경우에도 앱에서 사용자의 ID를 확인할 수 있습니다. Facebook 로그인을 통해 앱에서 언제든지 Facebook 비밀번호를 다시 입력하도록 요청할 수 있습니다. 이 기능을 사용하면 사용자가 기기를 로그인한 상태로 두거나 타사에서 개발자의 앱을 사용하는 세션을 도용하는 것을 방지하는 데 도움이 됩니다.

앱에서는 로그아웃 기능을 사용하여 여러 다른 Facebook 사용자 계정 간에 전환하는 고유 메커니즘을 빌드해야 하며, 재인증에만 의존해서는 안 됩니다.

참고

현재 Android 및 iOS SDK에서는 재인증을 지원하지 않습니다.

재인증 활성화

로그인 플로 중에 로그인 대화 상자와 OAuth를 사용하여 어떻게 사용자를 인증하고 권한을 요청하는지 보여줍니다. 다시 인증하려면 다음과 같은 추가 매개변수를 사용하여 동일한 단계를 통해 강제 실행할 수 있습니다.

  • auth_type: 요청된 인증 기능을 쉼표로 구분된 리스트로 지정하는 매개변수입니다. 사용할 수 있는 옵션은 다음과 같습니다.
  • reauthenticate - 사용자에게 무조건 다시 인증하도록 요청합니다.

  • auth_nonce: 보호 재생을 제공하는 데 사용할 수 있는 앱 생성 영숫자 넌스(nonce)를 포함합니다. 자세한 내용은 auth_nonce 검사 방법을 참조하세요.

다음은 reauthenticateauth_type을 사용하여 다시 인증을 트리거하는 JavaScript SDK의 사용 예시입니다.

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

auth_nonce 매개변수

auth_nonce 매개변수는 앱에서 생성하는 임의의 영숫자 코드여야 합니다. 이 코드의 형식 및 생성 절차는 전적으로 개발자에 달려 있습니다. 예를 들어 로그인을 시도할 때마다 해시된 타임스탬프 버전 및 시크릿 코드 문자열이 완전히 고유하다면 이러한 사항만으로도 충분할 수 있습니다. 이 값을 사용하면 앱에서 사용자가 재인증했는지 확인할 수 있습니다.

로그인 플로를 다시 수정하여 auth_nonce 매개변수를 지정해야 합니다.

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

이 넌스(nonce)를 전에 사용한 적이 없는지 확인하려면 특정 넌스를 이미 사용했는지 확인하기 위해 앱의 데이터베이스를 검사하는 코드와 통신할 함수를 만들어야 합니다.

다음은 고유한 특정 설정에 맞게 조정할 수 있는 가이드로 JavaScript(jQuery 프레임워크 포함) 및 PHP를 사용하는 예제입니다. 이 예제에서는 하드 코딩된 문자열을 넌스로 사용합니다. 생성된 넌스를 동적으로 호출하여 이 넌스를 바꿔야 합니다.

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

참고: 이 PHP 파일에는 앱의 데이터베이스와 제공된 넌스를 비교하는 픽셀 코드가 포함되어 있지 않으며, 암시만 되어 있습니다. 고유 데이터베이스 및 코드 환경에 맞게 이 코드를 맞춤 조정해야 합니다.

<?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';
   }
?>

이 예제에서는 다시 인증 로그인 대화 상자에서 액세스 토큰 응답을 받은 다음 checkNonce() JavaScript 함수를 호출합니다. JavaScript SDK를 예제로 사용하면 다음과 같습니다.

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는 다시 인증의 일부로, 선택 사항입니다. 그러나 앱에서는 사용을 적극 추천합니다. 특히 reauthenticateauth_type으로 요청하는 경우에는 더욱 그렇습니다.