Digital Credentials API: Identitas yang aman dan pribadi di web

Dipublikasikan: 3 Oktober 2025

Dengan senang hati kami mengumumkan bahwa Digital Credentials API kini diaktifkan secara default mulai Chrome 141. Selain itu, iOS 26 menambahkan dukungan untuk Digital Credentials API ke Chrome dan browser lainnya. API ini menghadirkan tingkat keamanan dan privasi baru untuk verifikasi identitas di web, sehingga memungkinkan situs meminta dan menerima informasi yang dapat diverifikasi dari pengguna dengan cara yang standar.

Setelah Uji Coba Origin berhasil, Digital Credentials API kini mendukung presentasi kredensial dalam perangkat yang sama di Android dan presentasi lintas perangkat di Chrome desktop.

Latar belakang

Sejauh ini, memverifikasi identitas secara online merupakan proses yang rumit, yang sering kali mengharuskan pengguna mengupload hasil pindaian tanda pengenal mereka. Praktik ini sering kali berarti membagikan lebih banyak data daripada yang diperlukan, yang menimbulkan masalah privasi yang signifikan bagi pengguna. Bagi developer, hal ini juga menimbulkan risiko, karena mereka harus memastikan solusi mereka mampu memproses dan menyimpan data sensitif yang sering kali tidak seragam dengan cara yang aman dan menjaga privasi.

Pada saat yang sama, peraturan seperti eIDAS 2.0 mewajibkan pemerintah menyediakan sarana identifikasi digital kepada publik. Dompet identitas digital ini harus dapat menyimpan berbagai kredensial, termasuk bukti identitas dan usia. Penyedia layanan online dapat meminta kredensial ini untuk memverifikasi identitas pengguna.

Menyadari potensi kredensial digital untuk memenuhi permintaan pengguna akan privasi dan kebutuhan developer untuk memverifikasi data pengguna, komunitas standar web di W3C telah mengembangkan solusi: Digital Credentials API. Digital Credentials API bertujuan untuk mengatasi masalah ini dengan memperkenalkan antarmuka bawaan untuk memverifikasi informasi pengguna, yang meningkatkan keamanan, privasi, dan pengalaman pengguna dibandingkan dengan alternatifnya. Dengan API ini, pengguna tidak perlu lagi mengupload dokumen sensitif seperti hasil pindaian tanda pengenal ke beberapa situs. Sebagai gantinya, situs dapat membangun kepercayaan dengan penggunanya dengan hanya meminta data spesifik yang ditandatangani secara kriptografis yang mereka butuhkan dari penerbit tepercaya.

Fitur inti

Digital Credentials API dibangun berdasarkan tiga prinsip inti: privasi, dukungan lintas platform, dan standardisasi.

Privasi

Digital Credentials API meningkatkan privasi dan keamanan online. Hal ini memungkinkan pengguna menampilkan ID digital dari dompet digital mereka ke situs untuk memverifikasi fakta tertentu tanpa mengungkapkan data sensitif yang mendasarinya. Misalnya, API dapat memverifikasi bahwa pengguna berusia di atas 18 tahun tanpa mengungkapkan tanggal lahir lengkapnya. Prinsip "pengungkapan selektif" ini memastikan bahwa situs hanya menerima informasi minimum yang diperlukan.

Digital Credentials API juga kompatibel dengan protokol Zero Knowledge Proofs (ZKP), seperti ZK Longfellow Google, yang memastikan privasi pengguna dengan menampilkan bukti kriptografi bahwa pernyataan identitas tertentu benar tanpa mengungkapkan informasi lainnya.

Dukungan lintas platform

Digital Credentials API bertujuan untuk mendukung berbagai platform, sehingga pengguna dapat dengan mudah menampilkan informasi terverifikasi di berbagai perangkat.

Di Android: Menyediakan antarmuka pengguna bawaan, yang memungkinkan pengguna memilih kredensial dari aplikasi dompet yang diinstal.

Di desktop: Pengguna dapat menampilkan kredensial dari dompet digital mereka ke situs di browser desktop. Dengan memindai kode QR, sistem membuat koneksi yang aman, terenkripsi end-to-end, dan tahan terhadap phishing antara desktop dan perangkat seluler. Koneksi ini menggunakan protokol CTAP untuk memverifikasi kedekatan pengguna melalui BLE, sehingga memastikan bahwa pengguna hadir secara fisik dan mengontrol kedua perangkat.

Standardisasi

Interoperabilitas adalah kuncinya. Di Chrome, Digital Credentials API tidak bergantung pada platform protokol dan kompatibel dengan berbagai protokol presentasi, misalnya, OpenID4VP dan Lampiran C ISO 18013-7. Apple juga telah memperkenalkan dukungan untuk Digital Credentials API dari Safari 26.0.

Selain itu, Digital Credentials API dibangun berdasarkan dukungan pengelolaan kredensial bawaan di Android dan ekosistem dompet yang kompatibel yang terus berkembang. Google Wallet adalah aplikasi yang digunakan oleh pengguna awal, dengan dukungan dari Samsung Wallet dan 1Password yang akan segera hadir.

Apa yang baru sejak uji coba Origin?

Bagi Anda yang berpartisipasi dalam uji coba origin kami sebelumnya, Anda akan melihat bahwa Digital Credentials API telah berpindah dari navigator.identity.get() ke navigator.credentials.get(), sehingga menyelaraskannya dengan upaya penyatuan identitas yang lebih luas dengan Credential Management API. Selain itu, parameter providers telah diganti namanya menjadi requests, dan request telah diganti namanya menjadi data.

Penerapan

Mengintegrasikan Digital Credentials API melibatkan dua langkah utama: deteksi fitur, dan meminta kredensial. Developer juga harus menerapkan logika kustom untuk menentukan apakah aplikasi mereka dapat menggunakan kredensial.

Deteksi fitur

Sebelum menampilkan tombol "Verifikasi dengan Kredensial Digital", periksa apakah Digital Credentials API tersedia di browser pengguna.

if (typeof DigitalCredential !== "undefined") {
  // Digital Credentials API is supported
} else {
  // Digital Credentials API is not supported
}

Meminta kredensial

Meminta kredensial melibatkan panggilan ke navigator.credentials.get() dengan parameter digital. Dalam jenis kredensial digital, tambahkan array requests yang berisi DigitalCredentialGetRequest dengan parameter dasar berikut:

  • protocol: Tentukan protokol pertukaran dengan string. Misalnya,"openid4vp" atau "org-iso-mdoc". Mendeteksi apakah protokol didukung oleh browser sebagai berikut:

    if (DigitalCredential.userAgentAllowsProtocol("example-protocol")) {
        // Create a request with this protocol
      } else {
        // Protocol is not supported
    }
    
  • data: Objek dengan parameter yang diterima aplikasi dompet digital untuk protokol yang ditentukan. Untuk "openid4vp", parameter ditentukan dalam OpenID for Verifiable Presentation (OID4VP) untuk spesifikasi W3C Digital Credentials API.

    try {
      const digitalCredential = await navigator.credentials.get({
        digital: {
          requests: [{
            protocol: "openid4vp-v1-unsigned",
            data: {
              response_type: "vp_token",
          nonce: "[some-nonce]",
              client_metadata: {...},
          dcql_query: {...}
            }
        }]
        }
      });
    
      // Decrypt payload respons and verify credentials on the backend
      const response = await fetch("/verify", {
        method: "POST",
          body: JSON.stringify(digitalCredential.data),
          headers: {
              'Content-Type': 'application/json'
          }
      });
    } catch (e) {
      // Handle errors, such as the user canceling the request
      console.error(e);
    }
    

Misalnya, untuk meminta nama belakang, nama depan, dan nilai boolean pengguna yang menunjukkan apakah pengguna berusia di atas 21 tahun, Anda dapat menentukan payload berikut:

{
  protocol: 'openid4vp-v1-unsigned',
  data: {
    response_type: 'vp_token',
    nonce: '[some-nonce]',
    // Contains the Verifier metadata values, including supported credential formats and response encryption public key
    client_metadata: {
  // Supported credential formats. Refer to the documentation for specific values
        vp_formats_supported: {...},
   // Public key(s). Refer to the documentation for more detail.
        jwks: {...}
    },
    dcql_query: {
      // A wallet will try to find credentials it holds that match these definitions.
      credentials: [
        {
          // A locally unique identifier for this credential definition within the query.
          id: "cred_vc",
          format: "dc+sd-jwt",
          meta: {
            // 'vct_values' specifies the Verifiable Credential allowed type.
            // In this case, it's a European Digital Identity (EUDI) Personal Identification Data (PID) credential.
            vct_values: [
              "urn:eudi:pid:1"
            ]
          },
          // 'claims' is an array of specific data that's being requested.
          claims: [
            {
              // The path ["age_equal_or_over", "18"] corresponds to accessing `credential.age_equal_or_over['18']`.
              path: [
                "age_equal_or_over",
                "18"
              ]
            }
          ]
        }
      ]
    }
  }
}

Dalam contoh ini, client_metadata harus menentukan daftar format yang didukung. Lihat spesifikasi untuk mengetahui nilai yang dapat digunakan. Nilai opsional jwks yang ditetapkan di client_metadata harus berisi kunci publik yang digunakan untuk mengenkripsi respons. Anda juga dapat memeriksa kode demo untuk melihat contoh lainnya.

Berikut adalah contoh isi respons terenkripsi objek DigitalCredential:

{
    // This is an example for a response using an OpenID4VP protocol.
    // The format of the 'data' object will differ for other protocols.
    "protocol": "openid4vp-v1-unsigned",
    "data": {
        // To decrypt this JWE payload, use the private key.
   // The decrypted payload will be a JSON object containing the
       // Verifiable Presentation in the 'vp_token' claim.
        "response": "[jwe-token]"
    }
}

Dalam contoh ini, sistem meminta kredensial dengan protokol openid4vp-v1-unsigned dan respons berisi response di properti data.

Cara persis untuk mengurai respons bergantung pada protokolnya. Biasanya Anda harus:

  1. Mendekripsi payload respons. Metode dekripsi bergantung pada protokol yang digunakan. Lihat cara mendekripsi payload untuk openid4vp (menggunakan JWE) dan org-iso-mdoc (menggunakan Enkripsi Kunci Publik Hybrid).
  2. Verifikasi tanda tangan dan penerbit. Untuk mengetahui detail selengkapnya, lihat dokumentasi Penerimaan Kredensial Digital secara Online.

Untuk melihat contoh kode untuk protokol yang berbeda, lihat kode untuk demo atau versi yang dihosting langsung.

Memverifikasi kepercayaan pada penerbit

Tanda tangan kriptografi kredensial digital membuktikan bahwa kredensial tersebut autentik. Namun, developer harus memverifikasi bahwa penerbit sesuai dan tepercaya untuk kasus penggunaan spesifik mereka. Misalnya, untuk memberikan diskon bagi mahasiswa universitas, situs e-commerce akan memerlukan kredensial yang dikeluarkan oleh universitas terakreditasi, dan akan menolak kredensial yang ditandatangani oleh entitas lain. Cara umum untuk memverifikasi kepercayaan pada penerbit adalah dengan menyimpan daftar penerbit yang disetujui dan menolak penerbit yang tidak cocok.

Mulai

Siap untuk mulai membangun solusi? Berikut ini hal yang perlu Anda ketahui.

  • Ketersediaan: Chrome 141 atau yang lebih baru mengaktifkan Digital Credentials API secara default di berbagai platform.
  • Prasyarat: Pengguna memerlukan perangkat yang kompatibel, misalnya, Android yang menjalankan layanan Google Play versi 24.0 atau yang lebih tinggi, atau perangkat iOS yang menjalankan versi 26 atau yang lebih baru. Perangkat harus memiliki aplikasi dompet digital terinstal yang mendukung Digital Credentials API, misalnya, Google Wallet atau dompet demo.
  • Coba demo: Cara terbaik untuk memahami pengalaman pengguna dan menguji penerapan Anda adalah dengan mencoba demo langsung di https://verifier.multipaz.org dengan Chrome 141 atau yang lebih baru.

Resource

Untuk mengetahui informasi selengkapnya, lihat referensi berikut:

Beri masukan

Setelah Digital Credentials API diluncurkan, kami ingin mengetahui pengalaman Anda saat membangun dengan API tersebut. Ajukan masalah untuk menyampaikan masukan atau melaporkan bug.