隆重推出 Digital Credentials API 源试用

Digital Credentials API 的源试用将从 Chrome 128 开始。Digital Credentials API 是一种新的网络平台 API,可让网站通过数字凭据(例如存储在数字钱包中的驾照或国民身份证)选择性地请求可验证的用户信息。

背景

随着许多公共和私有实体开始颁发设备专用数字凭据,现实世界的数字身份正在成为现实。例如,部分美国州(例如亚利桑那州、加利福尼亚州、科罗拉多州、佐治亚州和马里兰州)的移动驾照和 ID 现在可以在移动设备上配置到 Google 钱包等数字钱包应用。相关法规还出台了关于接受数字凭据进行某些在线验证的法规,eIDAS 2.0 就是其中一例。

<ph type="x-smartling-placeholder">
</ph> Google 钱包中的手机驾照
Google 电子钱包中的手机驾照。

数字凭证的特点取决于其格式,但通常包括:

  • 增强的安全性和隐私性:使用高级加密和强身份验证方法有助于保护敏感数据并确保安全访问。例如,在通过电子钱包应用进行身份验证后,凭据的呈现通常会得到保护。
  • 选择性披露信赖方 (RP) 可以请求从凭据中选择特定信息,从而让用户能够将分享的数据限制为符合用例需要的内容。例如,可以分享用户是否年满 18 周岁,而不透露该用户的出生日期。
  • 互操作性:凭据应符合国际标准,能够兼容不同的系统和国家/地区,以方便跨境接受。
  • 可验证性:分享的凭据数据由发卡机构进行数字签名;RP 可以验证此签名以验证数据的真实性。

由于数字凭据的原因”可验证的特性,它们可以实现如下用例:

  • 年龄验证:在投放有年龄限制的内容或购买有年龄限制的内容之前,请先申请年龄验证用户的年龄。
  • 身份验证:申请姓名和地址以验证用户的身份,以便遵守法律法规或防范欺诈。
  • 驾驶权限检查:验证用户是否有驾驶资格(例如租车时)。

随着网站开始与移动钱包应用直接通信(例如使用自定义网址架构),为各种用例请求数字凭据,浏览器发现可以通过专门构建的 API 使互动更加安全、更抗滥用和更易于使用。

Digital Credentials API 简介

Digital Credentials API 是一种新的网络平台 API,它允许 RP 网站从钱包应用请求提供数字凭据。从 Chrome 128 开始,此 API 作为源试用在 Chrome 中提供。

该 API 与协议无关,因此 RP 可以根据其要求指定协议。当 RP 发出请求时,浏览器会向移动操作系统发送请求,该操作系统会在已安装的电子钱包应用中搜索匹配的凭据。如果发现任何 ID,移动操作系统会提示用户进行选择,并将请求发送到用户选择的钱包。完成本地身份验证后,电子钱包会返回包含所请求的凭据数据的响应。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 浏览器、钱包和依赖方之间的通信示意图。

Chrome 将首先在 Android 版 Chrome 中支持该 API,以便从同一设备上的钱包应用请求凭据。未来,我们计划支持 Chrome 桌面版在另一种移动设备上跨设备请求凭据。

该功能发布后,Google 钱包将与 Digital Credentials API 集成,这使得部分企业和组织可以通过 Android 版 Chrome 发起请求,让用户在线出示其身份信息,然后通过检查加密签名来验证所传输数据的真实性。如果您有意接受 Google 钱包中的数字身份证件,请填写此表单

Google 账号很快也会使用该 API 来验证特定用户的出生日期。居住在受支持的美国州境内的用户将能够使用在可用钱包应用(包括 Google 钱包)中配置的州身份证件或驾照,仅与 Google 无缝分享出生日期,而不分享其身份的其他详细信息。这样一来,用户就能以可保护隐私的方式向 Google 证明自己符合与账号相关的年龄要求

试试看

如需试用 Digital Credentials API,请按照以下说明操作:

  1. 按照此页面中的说明安装演示钱包应用。
    • 演示钱包应用下载到您的 Android 设备。
    • 运行命令 adb install -t <path-to-apk> 以安装该应用。
  2. 启动 IC 钱包应用并配置演示版移动驾照 (mDL)。
    • 点按菜单按钮,然后选择添加自签名文档
  3. 使用 Chrome 128 或更高版本访问 https://digital-credentials.dev
  4. 请求凭据 (OpenID4VP)

请查看使用 https://digital-credentials.dev(供开发者为不同属性生成凭据请求的测试网站)的演示:

以下是该演示的分步说明:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 1.用户到达信赖方网站,并要求提供其经过验证的姓氏、名字,并保证年满 21 周岁。
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 2.浏览器会确认用户是否打算与该网站共享任何数字凭据。
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 3.操作系统会显示所请求的信息,以及与用户选择并完成请求匹配的符合条件的凭据。
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 4.钱包会在本地通过屏幕解锁对用户进行身份验证。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 5.请求的数字凭据现在会传递到信赖方的网站。

该 API 的工作方式

Digital Credentials API 基于 Credential Management API 构建,但基于独立的 API Surface: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 Surface 与 navigator.credentials.get() 类似,只不过它仅接受 "digital" 凭据类型。在数字凭据类型中,添加 providers 数组,其中包含 IdentityRequestProvider 和以下基本参数:

使用 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 用于可验证呈现 (OID4VP) 规范。

Android 版 Chrome 支持 Digital Credentials API,目前处于源试用阶段。Chrome 桌面版和 iOS 版目前不支持此功能。对于其他浏览器引擎,我们会通过 W3C Web Incubator 社区群组为活跃的会话提供支持。

参与源试用

对于开发工作,您可以通过在 Chrome 128 或更高版本中开启 Chrome 标志 chrome://flags#web-identity-digital-credentials,在本地启用 Digital Credentials API。

此功能也可作为源试用提供。通过源试用,您可以试用新功能,并向 Web 标准社区提供有关其易用性、实用性和有效性的反馈。如需了解详情,请参阅开始试用。如需报名参加此次或另一项源试用,请访问注册页面

  1. 为您的源请求令牌
  2. 将令牌添加到您的网页。您可以采用下列两种方法: <ph type="x-smartling-placeholder">
      </ph>
    • 在每个网页的标头部分添加 origin-trial <meta> 标记。例如,这可能如下所示:<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">.
    • 如果您能配置自己的服务器,还可以使用 Origin-Trial HTTP 标头添加令牌。生成的响应标头应如下所示:Origin-Trial: TOKEN_GOES_HERE.

分享反馈

如果您对 Digital Credentials API 有任何反馈,请将其提交到专用的 Chromium 问题跟踪器