Autentikasi ulang memungkinkan aplikasi Anda mengonfirmasi identitas seseorang meskipun telah diverifikasi sebelumnya. Facebook Login memungkinkan aplikasi Anda meminta seseorang untuk memasukkan kembali kata sandi Facebook mereka kapan saja. Anda dapat menggunakan ini untuk mencegah kasus ketika pengguna meninggalkan perangkat dalam keadaan login atau ketika pihak ketiga membajak sesi seseorang dengan aplikasi Anda.
Aplikasi harus membangun mekanismenya sendiri untuk beralih di antara akun pengguna Facebook yang berbeda menggunakan fungsi keluar dan tidak boleh mengandalkan autentikasi ulang untuk ini.
Android dan iOS SDK saat ini tidak mendukung autentikasi ulang.
Selama alur login, kami tunjukkan cara menggunakan Dialog Login dan OAuth untuk mengautentikasi seseorang dan meminta izin darinya. Untuk mengautentikasi ulang, Anda dapat menggunakan langkah-langkah yang sama berikut dengan parameter tambahan untuk memaksanya:
auth_type
: parameter ini menetapkan fitur autentikasi yang diminta (sebagai daftar yang dipisahkan koma). Opsi yang valid:reauthenticate
- meminta orang tersebut untuk mengautentikasi ulang tanpa syarat
auth_nonce
: mencakup aplikasi yang dibuat nonce alfanumerik yang dapat digunakan untuk menyediakan perlindungan putar ulang. Lihat cara untuk memeriksa auth_nonce
untuk detailnya.
Berikut adalah contoh penggunaan JavaScript SDK yang memicu autentikasi ulang menggunakan auth_type
dari reauthenticate
:
FB.login(function(response) { // Original FB.login code }, { auth_type: 'reauthenticate' })
auth_nonce
Parameter auth_nonce
dimaksudkan untuk menjadi kode alfanumerik yang sepenuhnya arbitrer yang dihasilkan aplikasi Anda. Proses pembuatan dan format kode ini sepenuhnya terserah Anda. Contoh: versi hash dari cap waktu dan string rahasia mungkin cukup, selama itu benar-benar unik untuk setiap upaya Login. Nilai ini memungkinkan aplikasi Anda menentukan apakah pengguna telah diautentikasi ulang.
Anda perlu lagi mengubah alur login Anda untuk menentukan parameter auth_nonce
, contoh:
FB.login(function(response) { // Original FB.login code }, { auth_type: 'reauthenticate', auth_nonce: '{random-nonce}' })
Untuk memeriksa bahwa nonce ini belum pernah digunakan sebelumnya, Anda perlu membuat fungsi untuk berkomunikasi dengan kode yang memeriksa database aplikasi Anda untuk melihat apakah itu sudah menggunakan nonce tertentu.
Di bawah ini adalah contoh penggunaan JavaScript (dengan framework jQuery) dan PHP sebagai panduan yang dapat Anda sesuaikan dengan pengaturan spesifik Anda sendiri. Untuk contoh kami, kami akan menggunakan string hard-code sebagai nonce. Anda harus mengganti ini dengan panggilan dinamis ke nonce yang dihasilkan.
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.'); } }); }
Catatan: File PHP ini hanya menyiratkan, dan tidak termasuk, snippet kode yang akan membandingkan nonce yang diberikan dengan database aplikasi. Anda harus menyesuaikan ini dengan database dan lingkungan kode Anda sendiri:
<?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'; } ?>
Dalam contoh ini, fungsi JavaScript checkNonce()
akan dipanggil setelah menerima tanggapan token akses dari dialog login autentikasi ulang. Menggunakan JavaScript SDK sebagai contoh:
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}' })
Harap diperhatikan bahwa auth_nonce
adalah bagian opsional dari autentikasi ulang. Namun, aplikasi sangat dianjurkan untuk menggunakannya, terutama saat meminta reauthenticate
sebagai auth_type
.