Erneute Authentifizierung

Mit der erneuten Authentifizierung kann deine App die Identität einer Person bestätigen, selbst wenn sie bereits zuvor verifiziert wurde. Bei Facebook Login fordert deine App den Nutzer dazu auf, sein Facebook-Passwort jedes Mal erneut einzugeben. Dadurch kannst du verhindern, dass ein Nutzer auf einem Gerät angemeldet bleibt oder ein Dritter die Sitzung eines Nutzers über deine App übernimmt.

Apps sollten über eigene Mechanismen zum Wechseln zwischen verschiedenen Facebook-Nutzerkonten über Abmeldefunktionen verfügen und sich nicht auf die erneute Authentifizierung verlassen.

Hinweis

Das Android- und das iOS-SDK unterstützen die erneute Authentifizierung derzeit nicht.

Erneute Authentifizierung aktivieren

Während deines Login-Vorgangs zeigen wir dir, wie du den Login-Dialog und oAuth dazu verwenden kannst, einen Nutzer zu authentifizieren und Berechtigungen von ihm anzufordern. Für die erneute Authentifizierung kannst du dieselben Schritte mit zusätzlichen Parametern verwenden:

Nachfolgend findest du ein Beispiel, in dem mittels dem JavaScript-SDK eine erneute Authentifizierung ausgelöst wird, die einen auth_type von reauthenticate verwendet:

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

Der auth_nonce-Parameter

Der auth_nonce-Parameter soll einen vollständig willkürlichen alphanumerischen Code darstellen, der von deiner App generiert wird. Wie du den Code generierst und formatierst, liegt ganz bei dir. Es können zum Beispiel eine gehashte Version des Zeitstempels und ein geheimer String ausreichend sein, sofern sie für jeden Anmeldeversuch einzigartig sind. Anhand dieses Wert kann deine App erkennen, ob ein Nutzer erneut authentifiziert wurde.

Du musst deinen Login-Vorgang erneut anpassen, um den auth_nonce-Parameter anzugeben, zum Beispiel:

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

Um zu prüfen, ob diese Nonce bereits einmal verwendet wurde, musst du eine Funktion erstellen, die mit Code kommuniziert, der die Datenbank deiner App daraufhin prüft, ob eine bestimmte Nonce bereits verwendet wurde.

Unten findest du ein Beispiel mit JavaScript (mit dem jQuery-Framework) und PHP, das du als Leitfaden verwenden kannst, um deine eigenen Änderungen entsprechend vorzunehmen. Hier verwenden wir beispielsweise einen vordefinierten String als Nonce. Diesen Code solltest du durch einen dynamischen Aufruf einer generierten Nonce ersetzen.

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

Hinweis: Die PHP-Datei deutet den Code-Ausschnitt, der die bereitgestellte Nonce gegen die Datenbank der App prüft, lediglich an und beinhaltet ihn nicht. Du solltest dies gemäß deiner Datenbank und deiner Code-Umgebung anpassen.

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

In diesem Beispiel würde die checkNonce()-Java-Script-Funktion aufgerufen werden, nachdem sie die Antwort des Zugriffsschlüssels vom Login-Dialog der erneuten Authentifizierung erhalten hat. Verwendung des JavaScript-SDKs als Beispiel:

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

Beachte, dass die auth_nonce ein optionaler Teil der erneuten Authentifizierung ist. Wir empfehlen aber dringend, dass deine App sie verwendet, besonders, wenn du eine reauthenticate als auth_type anforderst.