Anmeldedaten für Apps bei der Einrichtung eines neuen Geräts wiederherstellen

Mit der Funktion Anmeldedaten wiederherstellen im Credential Manager können Nutzer ihre App-Konten wiederherstellen, wenn sie ein neues Gerät einrichten. Diese API befindet sich in der Entwicklervorschau und ist auf allen Geräten mit Android 9 oder höher und GMS Core-Version 242200000 oder höher verfügbar. Die Funktion „Anmeldedaten wiederherstellen“ bietet unter anderem folgende Vorteile:

  • Konsistente Oberfläche: Nutzer können ihr App-Konto wiederherstellen, ohne sich manuell in jeder einzelnen App anmelden zu müssen.
  • Höhere Nutzerinteraktion: Nutzer verwenden Ihre App mit größerer Wahrscheinlichkeit weiter, wenn sie ihr Konto bei der Einrichtung eines neuen Geräts wiederherstellen können.
  • Geringerer Entwicklungsaufwand: Die Funktion zum Wiederherstellen von Anmeldedaten ist in Credential Manager integriert. Entwickler, die bereits Passkeys unterstützen, können also Funktionen zum Wiederherstellen von Anmeldedaten hinzufügen.

Funktionsweise

Mit „Anmeldedaten wiederherstellen“ können Sie die relevanten Anmeldedaten erstellen, abrufen und löschen.

  1. Wiederherstellungsanmeldedaten erstellen: Wenn sich der Nutzer in Ihrer App anmeldet, erstellen Sie Wiederherstellungsanmeldedaten, die mit seinem Konto verknüpft sind. Diese Anmeldedaten werden lokal gespeichert und mit der Cloud synchronisiert, wenn der Nutzer Google-Backup aktiviert hat und eine Ende-zu-Ende-Verschlüsselung verfügbar ist. Apps können die Synchronisierung mit der Cloud deaktivieren.
  2. Wiederherstellungsanmeldedaten abrufen: Wenn der Nutzer ein neues Gerät einrichtet, kann Ihre App die Wiederherstellungsanmeldedaten von der Anmeldeinformationsverwaltung anfordern. So können Sie den Nutzer automatisch anmelden, ohne dass zusätzliche Eingaben erforderlich sind.
  3. Wiederherstellungsanmeldedaten löschen: Wenn sich der Nutzer von Ihrer App abmeldet, sollten Sie die zugehörigen Wiederherstellungsanmeldedaten löschen.

Die Funktion „Anmeldedaten wiederherstellen“ lässt sich nahtlos in Backend-Systeme integrieren, in denen bereits Passkeys implementiert sind. Diese Kompatibilität beruht darauf, dass sowohl Passkeys als auch Wiederherstellungsschlüssel (Anmeldedatentyp, der von der Funktion „Anmeldedaten wiederherstellen“ verwendet wird) denselben zugrunde liegenden technischen Spezifikationen entsprechen. Durch diese Abstimmung kann der Prozess zum Wiederherstellen von Anmeldedaten Nutzeranmeldedaten, die in passkeys-fähigen Systemen gespeichert sind, effektiv abrufen und wiederherstellen. So wird eine einheitliche und nutzerfreundliche Erfahrung auf verschiedenen Plattformen und Authentifizierungsmethoden ermöglicht.

Ansicht mit Preisinformationen am unteren Rand des Anmeldedaten-Managers
Abbildung 1: Diagramm zur Wiederherstellung von App-Daten auf einem neuen Gerät mithilfe von Wiederherstellungsanmeldedaten, einschließlich der Erstellung der Anmeldedaten, der Initiierung eines Wiederherstellungsvorgangs und der automatischen Nutzeranmeldung

Implementierung

Die Restore Credentials API ist über die Credential Manager Jetpack-Bibliothek verfügbar. Die App lässt sich so aktivieren:

  1. Fügen Sie Ihrem Projekt die Credential Manager-Abhängigkeit hinzu.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. Erstellen Sie ein CreateRestoreCredentialRequest-Objekt.

  3. Rufen Sie die Methode createCredential() für das Objekt CredentialManager auf.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    Diese generierten Wiederherstellungsanmeldedaten sind eine Art WebAuthn-Anmeldedaten und werden als Wiederherstellungsschlüssel bezeichnet.

  4. Wenn der Nutzer ein neues Gerät einrichtet, rufen Sie die Methode getCredential() für das CredentialManager-Objekt auf.

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. Wenn sich der Nutzer von Ihrer App abmeldet, rufen Sie die Methode clearCredentialState() für das Objekt CredentialManager auf.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

Wenn Sie einen Sicherungsagenten verwenden, führen Sie den getCredential-Teil im onRestore-Callback aus. So wird dafür gesorgt, dass die Anmeldedaten der App sofort nach der Wiederherstellung der App-Daten wiederhergestellt werden.

Häufig gestellte Fragen

Frage 1: Was ist der Unterschied zwischen einem Wiederherstellungsschlüssel und einem Passkey?

Ein Wiederherstellungsschlüssel funktioniert ähnlich wie ein Passkey, ist aber speziell für die Konto-Wiederherstellung auf neuen Geräten konzipiert. Wenn Sie einen Passwortmanager wie den Google Passwortmanager zur Authentifizierung verwenden, werden Ihre nutzbaren Passkeys und Passwörter angezeigt, nicht aber der Wiederherstellungsschlüssel, da er nicht für reguläre Anmeldungen vorgesehen ist.

Frage 2: Ist ein Wiederherstellungsschlüssel ein Anmeldedatenpaar, das nur einmal verwendet werden kann?

Nein, ein Wiederherstellungsschlüssel ist kein Einmalanmeldedaten. Credential Manager ist zustandslos und kennt keine Nutzeraktivitäten. Daher kann der Schlüssel nach der Verwendung nicht automatisch gelöscht werden.

Wiederherstellungsschlüssel werden nur in den folgenden Situationen entfernt:

  • Aktionen auf Systemebene: Nutzer deinstallieren die App oder löschen ihre Daten.
  • Aufrufe auf App-Ebene: Sie löschen den Schlüssel programmatisch, indem Sie CredentialManager#clearCredentialState() aufrufen, wenn Sie die Nutzerabmeldung im Code Ihrer App verarbeiten.

Frage 3. Funktioniert die Funktion „Anmeldedaten wiederherstellen“ nur auf einem neuen Gerät?

Ja, diese Funktion ist für die Ersteinrichtung eines neuen Android-Geräts vorgesehen, da sie direkt mit der Funktion „Sichern und wiederherstellen“ des Systems verknüpft ist.

Frage 4: Kann ich mit „Anmeldedaten wiederherstellen“ einen Nutzer automatisch auf einem beliebigen Gerät anmelden, auf dem dasselbe Google-Konto angemeldet ist?

Nein, die Funktion „Anmeldedaten wiederherstellen“ ist nicht für die allgemeine Anmeldung auf verschiedenen Geräten vorgesehen. Das funktioniert nur in einem bestimmten Szenario: wenn ein Nutzer ein neues Gerät einrichtet, indem er ein Back-up von seinem alten Gerät wiederherstellt. Beide Geräte müssen mit demselben Google-Konto verknüpft sein, damit diese einmalige Wiederherstellung funktioniert.

Frage 5. Meine Organisation hat eine Haupt-App und mehrere untergeordnete Apps. Kann ein Wiederherstellungsschlüssel für alle diese Apps verwendet werden?

Nein. Ein Wiederherstellungsschlüssel ist an den eindeutigen Paketnamen einer Anwendung gebunden. Da Ihre Haupt-App und jede Unter-App unterschiedliche Paketnamen haben, müssen Sie für jede App einen separaten Wiederherstellungsschlüssel erstellen.

Frage 6. Ist ein Passkey erforderlich, um einen Wiederherstellungsschlüssel für das Konto eines Nutzers zu erstellen?

Nein, ein Passkey ist nicht erforderlich. Die Möglichkeit, einen Wiederherstellungsschlüssel zu erstellen, ist unabhängig von der Anmeldemethode des Nutzers. Sie dient dazu, den aktuellen authentifizierten Status des Nutzers zu speichern. Solange der Nutzer aktiv in Ihrer App angemeldet ist, können Sie einen Wiederherstellungsschlüssel für ihn generieren.

Frage 7. Kann der Nutzer den Wiederherstellungsschlüssel löschen?

Nein, der Nutzer hat keine direkte Kontrolle über den Wiederherstellungsschlüssel. Die App-Logik ist für die Verwaltung von Wiederherstellungsschlüsseln verantwortlich.

Aus Sicherheitsgründen empfehlen wir, dass die App den Schlüssel automatisch löscht, wenn sich ein Nutzer abmeldet. So wird sichergestellt, dass sie beim nächsten Öffnen der App auf demselben Gerät ordnungsgemäß abgemeldet werden und aufgefordert werden, sich noch einmal anzumelden.

Frage 8: Kann ich „Anmeldedaten wiederherstellen“ verwenden, ohne „allowBackup“ in meinem Manifest auf „true“ zu setzen?

Ja, die Funktion „Anmeldedaten wiederherstellen“ funktioniert unabhängig davon, ob „allowBackup“ auf „true“ gesetzt ist oder nicht.

Frage 9: Wie funktioniert „Anmeldedaten wiederherstellen“ für Nutzer, die in derselben App mit mehreren Konten angemeldet sind?

Die Funktion „Anmeldedaten wiederherstellen“ ist für die Verwendung mit jeweils nur einem Konto vorgesehen.