การการยืนยันตัวตนซ้ำจะช่วยให้แอพของคุณยืนยันข้อมูลระบุตัวตนของบุคคลได้ ถึงแม้ข้อมูลนั้นจะได้รับการยืนยันก่อนหน้านี้แล้ว แอพของคุณสามารถใช้การเข้าสู่ระบบด้วย Facebook เพื่อขอให้ผู้ใช้กรอกรหัสผ่าน Facebook ซ้ำได้ทุกเมื่อ คุณสามารถดำเนินการนี้ได้เพื่อป้องกันกรณีที่ผู้ใช้เข้าสู่ระบบบนอุปกรณ์ค้างไว้ หรือเมื่อบุคคลภายนอกลักลอบใช้ช่วงเวลาที่ใช้งานของผู้ใช้ด้วยแอพของคุณ
แอพจะสร้างกลไกของตัวเองเพื่อการสลับระหว่างบัญชีผู้ใช้ Facebook ต่างๆ โดยใช้ฟังก์ชั่นออกจากระบบ และไม่ควรพึ่งการยืนยันตัวตนซ้ำในเรื่องนี้
ขณะนี้ Android SDK และ iOS SDK ไม่รองรับการยืนยันตัวตนซ้ำ
ในระหว่างลำดับขั้นตอนการเข้าสู่ระบบ เราจะแสดงให้เห็นวิธีใช้กล่องการเข้าสู่ระบบและ OAuth เพื่อยืนยันตัวตนผู้ใช้และขอสิทธิ์การอนุญาตจากผู้ใช้ คุณสามารถยืนยันตัวตนซ้ำได้โดยใช้ขั้นตอนเดียวกันนี้แต่เพิ่มพารามิเตอร์เข้าไปเพื่อเป็นการบังคับใช้ดังนี้:
auth_type
: พารามิเตอร์นี้เจาะจงคุณสมบัติในการยืนยันตัวตนที่ขอ (เช่น รายการที่ใช้จุลภาคคั่น) ตัวเลือกที่สามารถใช้ได้คือreauthenticate
- ขอให้บุคคลนั้นยืนยันตัวตนซ้ำโดยไม่มีเงื่อนไข
auth_nonce
: ระบุคำเฉพาะกิจที่เป็นตัวอักษรและตัวเลขที่แอพสร้างขึ้น ซึ่งสามารถใช้เพื่อมอบระบบการป้องกันการเล่นซ้ำ โปรดดูวิธีตรวจสอบ auth_nonce
เพิ่มเติม
ตัวอย่างต่อไปนี้ใช้ 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&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