Memastikan kredensial Anda konsisten dengan penyedia kredensial

Saat pengguna membuat kunci sandi, server pihak tepercaya menyimpan detail tertentu, sementara penyedia kredensial, seperti Pengelola Sandi Google, menyimpan detail lainnya. Khususnya:

  • Server pihak tepercaya menyimpan kredensial kunci publik.
  • Penyedia kredensial menyimpan nama pengguna, nama tampilan, kunci pribadi, dan metadata terkait lainnya. Metadata ini membantu pengguna mengidentifikasi dan memilih kunci sandi yang diperlukan saat login.

Ketidakkonsistenan yang mungkin terjadi antara data yang disimpan di server pihak tepercaya dan penyedia kredensial dapat menyebabkan pengalaman pengguna yang buruk. Masalah dapat muncul dalam skenario berikut:

  • Kredensial dihapus di server pihak tepercaya, tetapi tidak di penyedia kredensial, sehingga penyedia kredensial menampilkan kredensial yang dihapus kepada pengguna.
  • Nama pengguna atau nama tampilan diperbarui di server pihak tepercaya, tetapi tidak di penyedia kredensial, sehingga penyedia kredensial menampilkan detail yang sudah tidak berlaku.

Signal API Credential Manager memungkinkan pihak tepercaya berkomunikasi dengan penyedia kredensial untuk menghapus kredensial dan memperbarui metadata pengguna, seperti nama pengguna dan nama tampilan. Ada tiga jenis permintaan yang didukung untuk skenario yang berbeda:

  • SignalUnknownCredentialRequest

    • Menunjukkan bahwa kredensial tertentu tidak lagi valid dan harus disembunyikan atau dihapus dari penyedia kredensial.
  • SignalAllAcceptedCredentialIdsRequest

    • Memberikan daftar ID kredensial yang diterima kepada penyedia kredensial.
  • SignalCurrentUserDetailsRequest

    • Memperbarui detail metadata pengguna.

Kompatibilitas versi

Signal API tersedia di perangkat yang menjalankan Android 15 atau yang lebih tinggi, dan tersedia mulai dari library androidx.credentials versi 1.6.0-beta03.

Implementasi

Untuk menggunakan Signal API, ikuti langkah-langkah berikut:

  1. Tambahkan dependensi Credential Manager ke project Anda.

    Kotlin

    dependencies {
        implementation("androidx.credentials:credentials:1.6.0-rc01")
    }

    Groovy

    dependencies {
        implementation "androidx.credentials:credentials:1.6.0-rc01"
    }

  2. Memanggil Signal API

    Untuk mengirim permintaan sinyal ke penyedia kredensial, gunakan permintaan sinyal yang didukung. Setiap jenis permintaan sinyal memerlukan permintaan JSON, seperti yang ditunjukkan dalam contoh berikut:

    • Kredensial tidak dikenal (SignalUnknownCredentialRequest)

      Gunakan SignalUnknownCredentialRequest untuk menandakan bahwa kredensial ditolak dan dianggap tidak diketahui. Saat penyedia kredensial menerima sinyal ini, penyedia akan menyembunyikan atau menghapus kredensial.

      Penggunaan

      Gunakan sinyal ini saat pihak tepercaya gagal memverifikasi pernyataan kunci sandi. Hal ini menunjukkan bahwa kunci sandi tidak valid dan harus disembunyikan atau dihapus oleh penyedia kredensial.

      Parameter JSON yang diperlukan untuk permintaan ini adalah rpId dan credentialId. Untuk mengetahui informasi selengkapnya tentang struktur JSON, lihat opsi signalUnknownCredential.

      credentialManager.signalCredentialState(
          SignalUnknownCredentialRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */)
              }.toString()
          )
      )
      
    • Semua kredensial yang diterima (SignalAllAcceptedCredentialIdsRequest)

      Gunakan SignalAllAcceptedCredentialIdsRequest untuk memberi tahu penyedia kredensial dengan kumpulan semua kredensial yang diterima. Setelah sinyal diterima oleh penyedia kredensial, penyedia kredensial akan menyembunyikan atau menghapus kredensial apa pun yang tidak disertakan dalam daftar ini, atau menampilkan kembali kredensial yang sebelumnya disembunyikan dan kini disertakan dalam daftar.

      Penggunaan

      Gunakan sinyal ini saat verifikasi kunci sandi gagal oleh pihak tepercaya. Kegagalan ini berarti kunci sandi tidak valid dan harus disembunyikan dari atau dihapus oleh penyedia kredensial. Anda juga dapat menggunakan sinyal ini setiap kali Anda perlu menyiarkan kumpulan ID kredensial yang diketahui ke penyedia kredensial.

      Parameter JSON yang diperlukan untuk permintaan ini adalah rpId, userId, dan allAcceptedCredentialIds. Untuk mengetahui informasi selengkapnya tentang struktur JSON, lihat opsi signalAllAcceptedCredential.

      credentialManager.signalCredentialState(
          SignalAllAcceptedCredentialIdsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put(
                      "allAcceptedCredentialIds",
                      JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */)
                  )
              }.toString()
          )
      )
      
    • Detail pengguna saat ini (SignalCurrentUserDetailsRequest)

      Gunakan SignalCurrentUserDetailsRequest untuk memberi tahu penyedia kredensial bahwa metadata, seperti nama pengguna dan nama tampilan untuk pengguna tertentu, telah diperbarui dan harus muncul di penyedia kredensial.

      Penggunaan

      Gunakan sinyal ini saat pengguna atau pihak tepercaya memperbarui metadata kunci sandi yang terkait dengan akun pengguna.

      Parameter JSON yang diperlukan untuk permintaan ini adalah rpId, userId, name, dan displayName. Untuk mengetahui informasi selengkapnya tentang struktur JSON, lihat opsi signalCurrentUserDetails.

      credentialManager.signalCredentialState(
          SignalCurrentUserDetailsRequest(
              requestJson = JSONObject().apply {
                  put("rpId", rpId /* [String] RP ID of the relying party */)
                  put("userId", userId /* [String] User ID of the current user */)
                  put("name", name /* [String] New Name to be updated for the current user */)
                  put("displayName", displayName /* [String] New display name to be updated for the current user */)
              }.toString()
          )
      )
      

Menguji penerapan

Untuk menguji penerapan Signal API, selesaikan langkah-langkah berikut:

  1. Instal contoh penyedia kredensial bernama MyVault.

  2. Aktifkan MyVault sebagai penyedia kredensial di Setelan > Sandi, Kunci Sandi & Akun > Layanan Pilihan.

    Menu Layanan Pilihan di setelan Android, yang menampilkan MyVault diaktifkan sebagai penyedia kredensial.

  3. Aktifkan semua notifikasi untuk MyVault di Setelan > Aplikasi > MyVault > Notifikasi.

    Menu Notifikasi untuk aplikasi MyVault, yang menampilkan semua notifikasi yang diaktifkan.

  4. Pastikan Tampilkan di layar diaktifkan untuk notifikasi di Setelan > Aplikasi > MyVault > Notifikasi > Kategori > Saluran Notifikasi Signal API.

    Setelan Channel Notifikasi Signal API untuk MyVault, yang menampilkan opsi &#39;Muncul di layar&#39; diaktifkan.

  5. Di aplikasi Anda, picu alur yang mengirim permintaan sinyal ke penyedia kredensial. Anda akan melihat notifikasi dari MyVault di layar. Tindakan ini memverifikasi bahwa penyedia kredensial menerima permintaan.