線上活動
數位身分證件可用於應用程式內和網站流程。如要接受 Google 錢包的憑證,您必須:
- 按照提供的指示,使用應用程式或網頁進行整合,
- 如要申請並同意從 Google 錢包接受憑證的服務條款,請填寫這份表單。
必要條件
如要測試 ID 呈現方式,您必須先使用指定的測試帳戶註冊公開 Beta 版計畫。接著,請將下列詳細資料提供給指定的 Google 聯絡窗口。
- 服務條款連結
- 標誌
- 網站
- Play 商店套件 ID (適用於 Android 應用程式整合)
- 用於加入公開測試的 Gmail ID
支援的憑證格式
市面上有幾種建議的標準定義了數位身分證明文件的資料格式,而業界有兩項重大的業界關注:
雖然 Android 憑證管理工具支援這兩種格式,但 Google 錢包目前僅支援以 mdoc 為基礎的數位身分證件。
使用者體驗
當應用程式要求身分屬性時,會發生以下流程:
憑證探索:應用程式會查詢可用的錢包,找出可滿足要求的憑證。接著,Android 會顯示系統 UI 選取器,顯示要共用的資訊。這可讓使用者在充分掌握資訊後,決定要使用哪個憑證。
使用者選取項目和錢包互動:使用者選取憑證後,Android 會叫用對應的錢包應用程式,完成交易。錢包應用程式可能會顯示自己的同意畫面,或要求使用生物特徵辨識功能進行確認。
結果:如果使用者同意,系統會將所選身分證件提供給要求的應用程式。如果使用者拒絕,系統會傳回錯誤。
應用程式內
如要從 Android 應用程式要求身分憑證,請按照下列步驟操作:
更新依附元件
在專案的 build.gradle 檔案中更新依附元件,以便使用 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")
}
設定 Credential Manager
如要設定及初始化 CredentialManager
物件,請新增類似以下的邏輯:
// Use your app or activity context to instantiate a client instance of CredentialManager.
val credentialManager = IdentityCredentialManager.Companion.getClient(context)
要求身分屬性
// 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, ...)
應用程式呼叫端會以 JSON 字串提供所有 IdentityRequest 參數。此處將其表示為 CredentialOption 的 requestMatcher
參數。憑證管理工具不會關心該 JSON 的內容。這項 JSON 要求會直接傳送至錢包,錢包會負責剖析這項要求,並決定哪些憑證可以滿足要求。完整導入方式請參閱範例應用程式。
我們預期 W3C 會將這項 JSON 要求定義為 Web API 的元件。這項標準化功能可讓瀏覽器直接將要求傳送至 Android。
為了讓您瞭解這類要求可能的樣貌,以下提供 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="
}
回應會傳回 W3C 定義的 identityToken (JSON 字串)。錢包應用程式會負責建立此回應。
範例:
{
"token": "<base64 encoded response>"
}
在伺服器上傳送權杖和處理程序
收到 identityToken 後,應用程式應將其傳送至應用程式伺服器進行驗證。初始步驟需要將 base64 格式權杖解碼。產生的位元組陣列代表 CBOR 資料,且遵循下列 CDDL。
CredentialDocument = {
"version": tstr, // Set to "ANDROID-HPKE-v1"
"pkEm": bstr, // Public key, in uncompressed form
"cipherText": bstr // The encrypted data
}
接下來,我們將使用 Android 專屬的 Handover 結構體,根據 ISO/IEC 18013-5:2021 計算 SessionTranscript:
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 使用 HPKE 加密來加密。如要解密,請使用 SessionTranscript 做為額外驗證資料,搭配先前產生的 EC 私密金鑰,以及下列設定:
- KEM:DHKEM(P-256, HKDF-SHA256)
- KDF:HKDF-SHA256
- AEAD:AES-128-GCM
產生的明文是 ISO/IEC 18013-5:2021 中定義的 DeviceResponse CBOR 位元組。DeviceResponse 必須依據 ISO/IEC 18013-5:2021 的第 9 節進行驗證。這包括幾個步驟,例如驗證 mdoc 是否來自信任的發證機構,以及回應是否由指定裝置簽署。您可以在這個驗證程序中使用 OpenWallet Foundation Identity Credential 專案中的 DeviceResponseParser 類別。
網路
如要在 Chrome 上使用 Digital Credentials API 要求身分憑證,您必須註冊 Digital Credentials API 來源試用。
現場活動
如要接受 Google 錢包中的身分證件,請按照下列步驟操作:
- 建構或取得讀取器,以接受 ISO 18013-5 定義的 ID
- 將 IACA 憑證載入讀取器中,確定所接受的 ID 真實
- 測試解決方案
- 將應用程式註冊至 Google 錢包
建構或取得讀取器,以便接受 ISO 18013-5 定義的 ID
錢包中的身分證件是根據 ISO 18013-5 行動駕照標準實作。這些標準使用 NFC 或 QR code 互動功能,並搭配 BLE 做為資料傳輸機制,因此任何可實作這些標準的裝置都能充當讀取器,甚至是行動應用程式。由於標準是開放的,因此市場上有幾種第三方實作方式可供選擇。您也可以視需要直接實作功能。
如需自行實作這項功能的指引,請參閱我們的 Android 開放原始碼參考讀取器 app,這個應用程式可實作 ISO 標準,並接受 Google 錢包中的 mDL。
如要開始使用,請建立並執行參考閱讀器應用程式:
- 複製參考應用程式存放區
- 在 Android Studio 中開啟專案
- 在 Android 裝置或模擬器上建構及執行
appverifier
目標。
將 IACA 憑證載入讀取器,確保系統接受的身分證件均為真品
如要驗證實體憑證,您必須在錢包中擁有支援發證機構核發的身分證件。下方列出 Google 電子錢包支援的發卡機構,以及其憑證的驗證連結。
測試解決方案
如要測試您的解決方案,請建構並執行我們的開放原始碼參考資料持有者 Android 應用程式。以下是建構及執行參照資料容器應用程式的步驟:
- 複製參考應用程式存放區
- 在 Android Studio 中開啟專案
- 在 Android 裝置或模擬器上建構並執行
appholder
目標。
(選用) 將應用程式註冊至 Google 錢包
如要將應用程式註冊至 Google 錢包,請填寫這份表單。