發布日期:2024 年 9 月 4 日,上次更新日期:2024 年 10 月 16 日
數位憑證 API 的來源試用從 Chrome 128 開始。Digital Credentials API 是新的網路平台 API,可讓網站透過數位憑證 (例如駕照或數位錢包中儲存的國民身分證) 要求提供可驗證的使用者相關資訊。
背景
許多公私實體開始發出裝置綁定的數位憑證,真實世界的數位身分也因此成為現實。舉例來說,現在已可將部分美國州別 (例如亞利桑那州、加州、科羅拉多州、喬治亞州和馬里蘭州) 的駕照和身分證件,新增至行動裝置上的 Google 錢包等數位錢包應用程式。針對特定線上驗證接受數位憑證的相關法規也正在制定中,eIDAS 2.0 就是其中之一。
數位憑證的功能取決於其格式,但通常包括:
- 強化安全性和隱私權:使用進階加密和強驗證方法,有助於保護機密資料,並確保存取安全性。舉例來說,憑證的呈現通常會受到保護,使用者必須透過錢包應用程式進行驗證。
- 選擇性揭露:信賴方 (RP) 可要求提供憑證中的資訊,讓使用者能夠將共用的資料限制在所需用途中。舉例來說,您可以分享使用者是否已滿 18 歲,但不透露使用者的出生日期。
- 互通性:憑證應遵循國際標準,以便在不同系統和國家/地區間相容,並利於跨國接受。
- 可驗證性:發出者會為共用的憑證資料加上數位簽名;RP 可以驗證這項簽名,確認資料的真實性。
由於數位憑證具有可驗證的特性,因此可用於以下用途:
- 年齡驗證:在提供年齡限制內容或購買年齡限制商品前,請先要求使用者驗證年齡。
- 身分驗證:要求提供姓名和地址來驗證個人身分,以遵循法規或防範詐欺行為。
- 駕駛執照檢查:驗證使用者是否符合駕駛資格 (例如租車時)。
由於網站已開始直接與行動錢包應用程式通訊 (例如使用自訂網址配置),以便針對各種用途要求數位憑證,因此瀏覽器可透過專用 API 讓這類互動更安全、更不易遭到濫用,也更容易使用。
數位憑證 API 簡介
Digital Credentials API 是新的網路平台 API,可讓 RP 網站要求在錢包應用程式中顯示數位憑證。這個 API 可在 Chrome 中以來源試用功能提供,從 Chrome 128 開始。
這個 API 不受通訊協定限制,讓 RP 可根據需求指定通訊協定。當 RP 提出要求時,瀏覽器會將要求傳送至行動作業系統,後者會在已安裝的錢包應用程式中搜尋相符的憑證。如果找到任何一個,行動作業系統就會提示使用者選取一個,並將要求傳送至使用者選取的錢包。本機驗證完成後,錢包會傳回回應,其中包含所要求的憑證資料。
Chrome 會先在 Android 版 Chrome 中支援該 API,以便在同一部裝置上的錢包應用程式中要求憑證。我們計劃在未來支援 Chrome 桌面,讓使用者透過其他行動裝置跨裝置要求憑證。
在推出時,Google 錢包將與數位憑證 API 整合,讓特定商家和機構可透過 Android 版 Chrome 向使用者提出要求,要求他們在線上出示身分證件,並檢查加密簽章,驗證傳輸資料的真實性。如要申請加入,請填寫這份表單,表示您有意願接受 Google 錢包中的數位身分證件。
Google 帳戶也即將使用這個 API 驗證特定使用者的出生日期。居住在支援的美國州的使用者,可使用在可用錢包應用程式 (包括 Google 錢包) 中提供的州身分證件或駕照,只與 Google 分享自己的出生日期,而不必分享其他身分詳細資料。這有助於使用者以保護隱私權的方式,向 Google 證明符合帳戶相關的年齡規定。
立即試用
需求條件:
- Google Play 服務 23.40 以上版本
- Chrome 128 以上版本
- 在
chrome://flags#web-identity-digital-credentials
啟用旗標
如要試用 Digital Credentials API,請按照以下操作說明操作:
- 按照操作說明安裝示範錢包應用程式。
- 啟動 IC Wallet 應用程式,並佈建示範行動驅動程式的授權 (mDL)。
- 輕觸選單按鈕,然後選取「新增自行簽署文件」。
- 使用 Chrome 128 以上版本前往 https://digital-credentials.dev。
- 按一下「Request Credentials (OpenID4VP)」。
請查看使用 https://digital-credentials.dev 的示範,這是開發人員用來產生不同屬性憑證要求的測試網站:
以下說明示範的逐步操作說明:
API 運作方式
Digital Credentials API 建構於 Credential Management API 之上,但來自獨立的 API 途徑:navigator.identity
。網站可透過呼叫 navigator.identity.get()
,要求儲存在行動錢包應用程式中的數位憑證。
// Gets a CBOR with specific fields out of mobile driver's license as an mdoc
const controller = new AbortController();
const {protocol, data} = await navigator.identity.get({
signal: controller.signal,
digital: {
providers: [{
protocol: "openid4vp",
request: {
response_type: "vp_token",
nonce: "n-0S6_WzA2Mj",
client_metadata: {...},
presentation_definition: {...}
}
}],
}
});
基本 API 途徑與 navigator.credentials.get()
類似,但只接受 "digital"
憑證類型。在數位憑證類型中,新增含有 IdentityRequestProvider
的 providers
陣列,並加入下列基本參數:
protocol
:使用字串指定交換協定。在來源測試期間,主要開發的通訊協定為"openid4vp"
。request
:為數位錢包應用程式接受指定通訊協定的參數。針對"openid4vp"
,參數的定義請參閱 W3C Digital Credentials API 規格的 OpenID for Verifiable Presentation (OID4VP)。
使用 OID4VP 傳送至數位憑證類型的酬載範例:
{
protocol: 'openid4vp',
request: {
response_type: 'vp_token',
nonce: 'gf69kepV+m5tGxUIsFtLi6pwg=',
client_metadata: {},
presentation_definition: {
id: 'mDL-request-demo',
input_descriptors: [{
id: "org.iso.18013.5.1.mDL",
format: {
mso_mdoc: {
alg: ["ES256"]
}
},
constraints: {
limit_disclosure: "required",
fields: [
{
path: ["$['org.iso.18013.5.1']['family_name']"],
intent_to_retain: false
}, {
path: ["$['org.iso.18013.5.1']['given_name']"],
intent_to_retain: false
}, {
path: ["$['org.iso.18013.5.1']['age_over_21']"],
intent_to_retain: false
}
]
}
}],
}
}
}
透過這項要求,在裝置上有 mDL 的錢包會提供可驗證的憑證組合,其中包含:
- 使用者的姓氏。
- 使用者的名字。
- 布林值,指出使用者是否年滿 21 歲。
以下是回應酬載的範例:
{
data: '{\n "vp_token": "o2d2ZXJzaW9uYz..."\n}'
id: '',
protocol: 'openid4vp',
type: 'digital'
}
在這個範例中,系統使用 "openid4vp"
通訊協定要求憑證,且回應中包含 data
屬性中的 "vp_token"
。請參閱「W3C Digital Credentials API 的 OpenID for Verifiable Presentation (OID4VP)」規格,瞭解如何剖析回應並驗證憑證。
Android 版 Chrome 支援數位憑證 API 來源試用版。電腦版和 iOS 版 Chrome 目前不支援這項功能。對於其他瀏覽器引擎,我們透過 W3C Web Incubator Community Group 促進了積極的對話。
參與來源試用
如要進行開發作業,您可以在 Chrome 128 以上版本中開啟 Chrome 旗標 chrome://flags#web-identity-digital-credentials
,在本機啟用數位憑證 API。
這項功能也提供原始試用版。來源試用計畫可讓您試用新功能,並針對其可用性、實用性和成效提供意見回饋給網路標準社群。詳情請參閱「開始使用來源試用」。如要註冊這項或其他原始試用方案,請前往註冊頁面。
- 為來源要求權杖。
- 將權杖加入網頁。有以下兩種方法:
- 在每個網頁的標頭中加入
origin-trial
<meta>
標記。例如:<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">.
- 如果您能設定伺服器,也可以使用
Origin-Trial
HTTP 標頭新增這個符記。產生的回應標頭應如下所示:Origin-Trial: TOKEN_GOES_HERE.
- 在每個網頁的標頭中加入
提供意見
如果您對 Digital Credentials API 有任何意見,請將該 API 提交至專屬的 Chromium Issue Tracker。