การยืนยันตัวตนซ้ำ

การการยืนยันตัวตนซ้ำจะช่วยให้แอพของคุณยืนยันข้อมูลระบุตัวตนของบุคคลได้ ถึงแม้ข้อมูลนั้นจะได้รับการยืนยันก่อนหน้านี้แล้ว แอพของคุณสามารถใช้การเข้าสู่ระบบด้วย Facebook เพื่อขอให้ผู้ใช้กรอกรหัสผ่าน Facebook ซ้ำได้ทุกเมื่อ คุณสามารถดำเนินการนี้ได้เพื่อป้องกันกรณีที่ผู้ใช้เข้าสู่ระบบบนอุปกรณ์ค้างไว้ หรือเมื่อบุคคลภายนอกลักลอบใช้ช่วงเวลาที่ใช้งานของผู้ใช้ด้วยแอพของคุณ

แอพจะสร้างกลไกของตัวเองเพื่อการสลับระหว่างบัญชีผู้ใช้ Facebook ต่างๆ โดยใช้ฟังก์ชั่นออกจากระบบ และไม่ควรพึ่งการยืนยันตัวตนซ้ำในเรื่องนี้

หมายเหตุ

ขณะนี้ Android SDK และ iOS SDK ไม่รองรับการยืนยันตัวตนซ้ำ

การเปิดใช้งานการยืนยันตัวตนซ้ำ

ในระหว่างลำดับขั้นตอนการเข้าสู่ระบบ เราจะแสดงให้เห็นวิธีใช้กล่องการเข้าสู่ระบบและ OAuth เพื่อยืนยันตัวตนผู้ใช้และขอสิทธิ์การอนุญาตจากผู้ใช้ คุณสามารถยืนยันตัวตนซ้ำได้โดยใช้ขั้นตอนเดียวกันนี้แต่เพิ่มพารามิเตอร์เข้าไปเพื่อเป็นการบังคับใช้ดังนี้:

ตัวอย่างต่อไปนี้ใช้ JavaScript SDK ที่สั่งการทำงานของการยืนยันตัวตนซ้ำโดยใช้ auth_type ของ reauthenticate:

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

เพื่อที่จะตรวจสอบว่ายังไม่เคยใช้คำเฉพาะกิจนี้มาก่อน คุณต้องสร้างฟังก์ชั่นเพื่อสื่อสารกับโค้ดที่จะตรวจสอบฐานข้อมูลของแอพ เพื่อตรวจดูว่าเคยใช้คำเฉพาะกิจนั้นแล้วหรือไม่

ตัวอย่างด้านล่างแสดงให้เห็นถึงการใช้ 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';
   }
?>

ในตัวอย่างนี้ อาจมีการเรียกฟังก์ชั่น JavaScript checkNonce() หลังจากที่ได้รับการตอบสนองของโทเค็นการเข้าถึงจากกล่องการเข้าสู่ระบบการยืนยันตัวตนซ้ำ การใช้ 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 เป็นส่วนที่จะระบุหรือไม่ก็ได้ในการยืนยันตัวตนซ้ำ อย่างไรก็ตาม เราขอแนะนำเป็นอย่างยิ่งให้แอพใช้ส่วนนี้ โดยเฉพาะในเวลาที่ขอ reauthenticate เป็น auth_type