Menerima tanda pengenal dari Google Wallet

Online

ID digital dapat diterima di alur dalam aplikasi dan web. Untuk menerima kredensial dari Google Wallet, Anda harus:

  1. Integrasikan menggunakan aplikasi atau web dengan mengikuti petunjuk yang diberikan dan
  2. Isi formulir ini untuk meminta dan menyetujui persyaratan layanan penerimaan kredensial dari Google Wallet.

Prasyarat

Untuk menguji presentasi ID, Anda harus mendaftar ke program beta publik terlebih dahulu menggunakan akun pengujian yang diinginkan. Selanjutnya, berikan detail yang dihasilkan kepada kontak Google yang ditetapkan bagi Anda.

  • Link Persyaratan Layanan
  • Logo
  • Situs
  • ID paket Play Store (untuk integrasi aplikasi Android)
  • ID Gmail yang digunakan untuk bergabung ke versi beta publik

Format Kredensial yang Didukung

Ada beberapa standar yang diusulkan yang menentukan format data dokumen identitas digital, dengan dua standar yang mendapatkan daya tarik industri yang signifikan:

  1. mdocs - ditentukan oleh ISO.
  2. Kredensial Verifikasi W3C - ditentukan oleh W3C.

Meskipun Pengelola Kredensial Android mendukung kedua format tersebut, Google Wallet hanya mendukung ID Digital berbasis mdoc untuk saat ini.

Pengalaman pengguna

Saat aplikasi meminta atribut identitas, proses berikut akan terjadi:

  1. Penemuan Kredensial: Aplikasi membuat kueri pada dompet yang tersedia untuk mengidentifikasi kredensial yang dapat memenuhi permintaan. Android kemudian menampilkan pemilih UI sistem, yang menampilkan informasi yang akan dibagikan. Hal ini memungkinkan pengguna membuat keputusan yang tepat tentang kredensial yang akan digunakan.

  2. Pemilihan Pengguna dan Interaksi Wallet: Pengguna memilih kredensial, dan Android memanggil aplikasi dompet yang sesuai untuk menyelesaikan transaksi. Aplikasi Wallet dapat menampilkan layar izinnya sendiri atau memerlukan konfirmasi biometrik.

Hasil: Jika pengguna mengizinkan, kredensial identitas yang dipilih akan dibagikan dengan aplikasi yang meminta. Jika pengguna menolak, pesan error akan muncul.

Dalam Aplikasi

Untuk meminta kredensial identitas dari aplikasi Android Anda, ikuti langkah-langkah berikut:

Memperbarui dependensi

Dalam build.gradle project, perbarui dependensi untuk menggunakan Pengelola Kredensial (beta):

dependencies {
    implementation("androidx.credentials:credentials:1.5.0-alpha05")
    // optional - needed for credentials support from play services, for devices running Android 13 and below.
    implementation("androidx.credentials:credentials-play-services-auth:1.5.0-alpha05")
}

Mengonfigurasi Pengelola Kredensial

Untuk mengonfigurasi dan melakukan inisialisasi objek CredentialManager, tambahkan logika yang mirip dengan berikut ini:

// Use your app or activity context to instantiate a client instance of CredentialManager.
val credentialManager = IdentityCredentialManager.Companion.getClient(context)

Meminta Atribut identitas

// Retrieves the user's digital identites from wallet apps for your app.
val getIdentityCredentialOption = GetDigitalCredentialOption(
    requestJson = requestJson, // this is what partners needs to set, example JSON specified below
)
val result = credentialManager.getCredential(request = GetCredentialRequest(credentialOptions, ...)

Pemanggil aplikasi menyediakan semua parameter IdentityRequest sebagai string JSON. Di sini, parameter ini direpresentasikan sebagai param requestMatcher dari CredentialOption. Pengelola Kredensial tidak terkait dengan konten json tersebut. Permintaan JSON ini akan diteruskan langsung ke wallet, yang kemudian bertanggung jawab untuk mengurainya dan memutuskan kredensial mana yang dapat memenuhi permintaan. Implementasi lengkapnya dapat ditemukan di aplikasi contoh.

Kami memperkirakan bahwa W3C akan menentukan permintaan JSON ini sebagai komponen API web. Standardisasi ini akan memungkinkan browser untuk langsung mengirimkan permintaan ke Android.

Untuk memberikan gambaran tentang tampilan permintaan tersebut, berikut adalah contoh permintaan mdoc:

{
  "selector": {
    "format": [
      "mdoc"
    ],
    "doctype": "org.iso.18013.5.1.mDL",
    "fields": [
      {
        "namespace": "org.iso.18013.5.1",
        "name": "family_name",
        "intentToRetain": false
      },
      {
        "namespace": "org.iso.18013.5.1",
        "name": "given_name",
        "intentToRetain": false
      },
      {
        "namespace": "org.iso.18013.5.1",
        "name": "age_over_21",
        "intentToRetain": false
      }
    ]
  },
  "nonce": "3cydsUF9xNFyBDAAWOct09hEeSqrFX2WB2r0G6f8Ol0=",
  "readerPublicKey": "BApmGdElal2-1dtafsdHVRa1EpAWZfhlQj_iof2I8L3V8_dCK1gVR0_12E4ZSQ2LcqXRd4zxVeKEqU1wUSgGWUU="
}

Respons menampilkan identityToken (string JSON), yang ditentukan oleh W3C. Aplikasi Wallet bertanggung jawab untuk membuat respons ini.

Contoh:

{
    "token": "<base64 encoded response>"
}

Mengirim token dan memprosesnya di server

Setelah menerima identityToken, aplikasi Anda harus mengirimkannya ke server aplikasi untuk diverifikasi. Langkah awal melibatkan dekode token dari format base64. Array byte yang dihasilkan mewakili data CBOR, yang mematuhi CDDL berikut.

CredentialDocument = {
  "version": tstr,       // Set to "ANDROID-HPKE-v1"
  "pkEm": bstr,          // Public key, in uncompressed form
  "cipherText": bstr     // The encrypted data
}

Langkah berikutnya adalah menghitung SessionTranscript dari ISO/IEC 18013-5:2021 dengan struktur Handover khusus Android:

SessionTranscript = [
  null,                // DeviceEngagementBytes not available
  null,                // EReaderKeyBytes not available
  AndroidHandover      // Defined below
]

AndroidHandover = [
  "AndroidHandoverv1", // Version number
  nonce,               // nonce that comes from request
  appId,               // RP package name
  pkRHash,             // The SHA256 hash of the recipient public key
]

cipherText dienkripsi menggunakan enkripsi HPKE. Untuk mendekripsinya, gunakan SessionTranscript sebagai Data Autentikasi Tambahan, bersama dengan kunci pribadi EC yang dibuat sebelumnya, dan setelan berikut:

  • KEM: DHKEM(P-256, HKDF-SHA256)
  • KDF: HKDF-SHA256
  • AEAD: AES-128-GCM

Cleartext yang dihasilkan adalah byte CBOR DeviceResponse seperti yang ditentukan dalam ISO/IEC 18013-5:2021. DeviceResponse harus divalidasi sesuai dengan klausul 9 ISO/IEC 18013-5:2021. Hal ini mencakup beberapa langkah, seperti memverifikasi bahwa mdoc berasal dari penerbit tepercaya dan bahwa respons ditandatangani oleh perangkat yang dimaksud. Class DeviceResponseParser dari project Kredensial Identitas OpenWallet Foundation dapat digunakan untuk bagian dari proses validasi ini.

Web

Untuk meminta Kredensial Identitas menggunakan Digital Credentials API di Chrome, Anda harus mendaftar ke uji coba origin Digital Credentials API.

Tatap Muka

Untuk menerima tanda pengenal dari Google Wallet, Anda harus melakukan langkah-langkah berikut:

  • Buat atau dapatkan pembaca untuk menerima ID seperti yang ditentukan oleh ISO 18013-5
  • Memuat sertifikat IACA ke pembaca untuk memastikan ID yang diterima bersifat autentik
  • Menguji solusi Anda
  • Mendaftarkan aplikasi Anda ke Google Wallet

Membuat atau memperoleh pembaca untuk menerima ID seperti yang ditentukan oleh ISO 18013-5

ID di Wallet diterapkan sesuai dengan standar ISO 18013-5 untuk lisensi pengemudi seluler. Keduanya menggunakan interaksi kode QR atau berbasis NFC bersama dengan BLE sebagai mekanisme transfer data - sehingga perangkat apa pun yang dapat menerapkan aspek standar tersebut dapat berfungsi sebagai pembaca, bahkan aplikasi seluler. Karena standar ini bersifat terbuka, ada beberapa penerapan pihak ketiga yang tersedia di pasar. Selain itu, Anda dapat langsung menerapkan fungsionalitasnya jika diperlukan.

Untuk panduan cara menerapkan fungsi ini sendiri, lihat aplikasi Android pembaca referensi open source kami, yang menerapkan standar ISO dan dapat menerima mDL dari Google Wallet.

Anda dapat memulai dengan mem-build dan menjalankan aplikasi pembaca referensi:

  • Buat clone untuk repositori aplikasi referensi
  • Buka project di Android Studio
  • Bangun dan jalankan target appverifier di perangkat Android atau emulator Anda.

Memuat sertifikat IACA ke pembaca untuk memastikan ID yang diterima bersifat autentik

Untuk memvalidasi kredensial yang sebenarnya, Anda harus memiliki tanda pengenal di dompet dari penerbit yang didukung. Daftar penerbit yang didukung oleh Google Wallet diberikan di bawah ini beserta link ke sertifikat mereka untuk verifikasi.

Menguji solusi Anda

Untuk menguji solusi Anda, bangun dan jalankan aplikasi Android holder referensi open source kami. Berikut adalah langkah-langkah untuk mem-build dan menjalankan aplikasi holder referensi:

  • Meng-clone repositori aplikasi referensi
  • Buka project di Android Studio
  • Bangun dan jalankan target appholder di perangkat Android atau emulator Anda.

(Opsional) Daftarkan aplikasi Anda ke Google Wallet

Daftarkan aplikasi Anda ke Google Wallet dengan mengisi formulir ini.