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

Terdapat 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 yang Dapat Diverifikasi W3C - ditentukan oleh W3C.

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

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 menyajikan 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 wallet 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, error akan ditampilkan.

Dalam Aplikasi

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

Memperbarui dependensi

Dalam build.gradle project, perbarui dependensi untuk menggunakan Credential Manager (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 memperhatikan konten json tersebut. Permintaan json ini akan diteruskan langsung ke dompet, yang kemudian bertanggung jawab untuk mengurainya dan memutuskan kredensial mana yang dapat memenuhi permintaan. Implementasi lengkap dapat ditemukan di aplikasi contoh.

Kami memperkirakan bahwa W3C akan menentukan permintaan JSON ini sebagai komponen API web. Standarisasi 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 decoding 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

Menerima tanda pengenal dari Google Wallet memerlukan langkah-langkah berikut:

  • Buat atau dapatkan pembaca untuk menerima ID seperti yang ditentukan oleh ISO 18013-5
  • Muat sertifikat IACA ke pembaca untuk memastikan ID yang diterima asli
  • 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 SIM seluler. Perangkat ini menggunakan interaksi berbasis NFC atau kode QR beserta BLE sebagai mekanisme transfer data - sehingga perangkat apa pun yang dapat mengimplementasikan aspek standar tersebut dapat bertindak sebagai pembaca, bahkan aplikasi seluler. Karena standar ini bersifat terbuka, ada beberapa penerapan pihak ketiga yang tersedia di pasar. Selain itu, Anda dapat menerapkan fungsi tersebut secara langsung 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:

  • Meng-clone repositori aplikasi referensi
  • Buka project di Android Studio
  • Build dan jalankan target appverifier di perangkat Android atau emulator.

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 membangun dan menjalankan aplikasi holder referensi:

  • Buat clone untuk repositori aplikasi referensi
  • Buka project di Android Studio
  • Build dan jalankan target appholder di perangkat Android atau emulator.

(Opsional) Daftarkan aplikasi Anda ke Google Wallet

Daftarkan aplikasi Anda ke Google Wallet dengan mengisi formulir ini.