
-
在网页上验证身份证件
了解 Digital Credentials 如何增强在线身份验证流程。我们将介绍网站如何整合 Digital Credentials API,以便请求访问“钱包”中的身份证件所包含的信息。我们还将探讨 App 如何利用新的 IdentityDocumentServices 框架提供 App 内的身份证件进行在线验证。
章节
- 0:00 - 简介
- 6:17 - Digital Credentials API
- 22:38 - Document Provider API
资源
- Apple Business Connect
- Implementing as an identity document provider
- Requesting a mobile document on the web
- Set up Verify with Wallet on the Web in Apple Business Connect
相关视频
WWDC25
WWDC22
-
搜索此视频…
大家好! 我叫 Erik 是 Apple 钱包和 Apple Pay 团队的工程师 大家好 我叫 Marcos 是 WebKit 团队的标准工程师 今天 我们将向你展示 如何使用数字身份证件来 简化在线身份验证流程 不论你是希望改进身份验证流程的 网站开发者 希望自己的 App 能够提供 身份证明的 App 开发者 或者只是对数字身份感兴趣的用户 本讲座就是为你准备的 数字身份证件正变得越来越普遍 因为能够代表各种身份证件 包括驾驶执照和政府颁发的 其他身份证件 这些数字身份证件承诺可以提供 相对于实体证件的一些重要好处: 其中一个就是更便于在网上使用 如今 如果我需要在网上 证明自己的身份 往往需要 上传实体身份证件的照片 这对于尝试验证身份的用户或企业 都不是好的解决方案 对于用户来说 体验很糟 他们需要先找到实体证件 然后要找到合适的背景来拍摄照片 同时还要确保照片清晰可辨 不模糊 而企业则需要打造复杂的解决方案 以便处理这些照片并确定真实性 这是个很难解决的问题 移动证件也叫“mdoc” 就是其中一种 旨在解决这个问题的 数字身份证件格式 mdoc 具有一些独特的属性: 首先 mdoc 是按照 ISO 18013-5 标准定义的 这使得 mdoc 能够跨平台互操作
mdoc 还可以提供 更加私密的用户体验 如果请求者只需要验证姓名和年龄 那么我只需与他们分享这些信息 使用 mdoc 就能做到这一点 最后 mdoc 还能提供 比实体 ID 更强大的安全功能 这使得 mdoc 更值得信赖 例如 mdoc 中的信息由签发者 加密签署 所以企业可以相信所收到的信息 是合法的 Apple 钱包中的 ID 就是采用 mdoc 格式及相应的 ISO 18013 标准开发的证件
如今 用户可以在各种场合出示 Apple 钱包中的个人身份证件 比如美国部分机场的安检口、 部分企业和场所 以及美国各地的 Apple Store 商店 用户还可以在部分利用我们的 Verify with Wallet API 的 App 中 使用自己的 ID 如果你有一款 App 并希望采用 Verify with Wallet API 来执行 身份验证 那么请观看 WWDC 22 讲座 “钱包与 Apple Pay 的新功能” 我们还看到了一些 司法管辖区以 mdoc 格式构建 证件提供程序 App 这些 App 允许用户存储和使用 自己的身份证件 为了模仿地方驾照管理部门 我们开发了一款管理驾照的演示 App 并恰当地命名为: “地方驾照管理局” 今年 我们很高兴地宣布 为这类证件提供程序 App 以及钱包 ID 发布了一些增强功能 从即将发布的版本起 我们将开始 支持 W3C Digital Credentials API 向 Safari 浏览器和 WebKit 请求 mdoc 数据 我来展示一下这项功能的运作方式 假设我正尝试从 Spaceship Rentals 租一艘宇宙飞船 在 Safari 浏览器中 我已经通过 他们的网站选择了飞船 和行程 现在我来到了身份验证步骤 接下来 我轻点“验证身份”按钮 这个按钮将触发 JavaScript Digital Credentials API 我的驾照存放在两个 App 中: “地方驾照管理局”App 和 Apple 钱包 通过这个 App 选择 UI 我可以选择想要使用的 App 来进行身份验证
这次 我要使用 Apple 钱包
现在可以看到屏幕上 显示了同意书供我查看 我可以通过品牌图标和名称 了解谁在请求查看我的 ID 信息 我还可以看到他们请求的具体元素 以及他们是否打算存储这些信息 接下来 我会通过面容 ID 授权 来批准这次身份验证 现在我们可以看到相关信息 已提交给 Spaceship Rentals 网站 是不是很酷?
嘿 Erik 这在 iPhone 上效果很好 但如果我使用的是 Mac 会怎么样呢? 好问题 我来给你展示一下
我又回到了 Safari 浏览器 但这次是在 Mac 上 我来到刚才使用过的 Spaceship Rentals 网站
接下来 轻点“验证身份”按钮 系统提示我在附近的 iPhone 上 继续操作 我的 iPhone 随后会显示一条通知 这样我就可以完成身份验证 轻点这个通知 你会看到相同的选项 让你选取要使用的 App 我还是用 Apple 钱包 然后系统会显示相同的同意书: 其中列出是谁提出这个请求、 他们请求的是哪些元素 以及他们是否会存储这些信息 我对这一切没有异议 所以通过面容 ID 确认
太棒了 我们现在看到证件信息已发回到 Mac 上的 Spaceship Rentals 我们不仅支持 Mac 上的 Safari 浏览器 而且也实现了 对其他操作系统和浏览器的 跨平台身份验证的标准化支持 因此 即使我是从其他平台或浏览器 租用飞船 仍然可以使用 iPhone 上的 ID 为此 我需要扫描浏览器显示的 二维码 你刚才看到的流程是基于一套标准 流程采用了 W3C Digital Credentials API 特别是请求配置文件 是按照 ISO 18013-7 附录 C 和 ISO 18013-5 标准定义的 FIDO CTAP 协议是用于跨平台流程 这意味着网站为集成 Apple 平台 而编写的任何代码 也可以用于采用这些相同标准的 其他浏览器和 App
这个体验从一开始就采用跨平台设计 包括支持 iPhone、iPad 和 Mac 以及其他浏览器和操作系统 无论用户在哪个平台浏览互联网 都可以使用 iPhone 上的证件 来进行身份验证 最后 我们为 Apple 平台开发了一组 证件提供程序 API 这些 API 允许 “地方驾照管理局”等 App 在身份验证流程中作为选项来显示 让我来分解一下你刚才看到的演示 并解释背后的工作原理 网页上的 mdoc 验证是从用户通过 浏览器访问网站开始的 然后网站会联系服务器 让它构建并 签署 mdoc 请求 网站收到请求后 就准备好使用 Digital Credentials API 当用户执行操作 开始身份验证时 网站将通过请求 调用 Digital Credentials API
然后浏览器会将这个请求 转发到底层操作系统 操作系统结合这个请求和 用户交互内容来确定 响应请求的证件源 这个证件提供程序 App 可能是 设备本地安装的 甚至可能是装在其他设备上的
一旦确定 请求就会传递给 适当的证件源进行处理 然后由用户授权发布证件 随后 加密响应从证件源 一路返回到提出请求的网站 最后 网站将这个响应发送到 服务器上 进行解密和验证
缩小一点 我们可以更清楚地看到 Apple 平台在线 mdoc 验证流程的 各个组成部分 有两个不同的切入点 可让你参与这个流程 如果你是 iOS 证件提供程序 App 的开发者 那么可能会对证件提供程序 API 感兴趣 这个 API 允许你的 iOS App 显示为 完成在线 mdoc 验证的一个选项
如果是对在线身份验证感兴趣的 网站 那么就会想要实现 W3C Digital Credentials API 以及相关请求和响应处理逻辑 接下来 我要花点时间深入讲解一下 这个流程
概括而言 网站必须采取三个步骤 来请求 mdoc
第一步 当用户访问网站进行 身份验证时 网站必须要求服务器生成并签署 证件请求 第二步 当用户准备好执行 身份验证时 网站必须通过 W3C Digital Credentials API 将请求传递给浏览器
最后在收到响应后 网站必须将 加密响应发送到服务器 进行解密和验证 Marcos 你看起来像个热心的 全栈开发者 就请你给我们介绍一下 Spaceship Rentals 网站 如何将身份验证步骤集成到结账流程 没问题 首先 我来展示一下如何利用 W3C Digital Credentials API 生成并签署请求 我们构建的请求要符合 ISO 18013-7 附录 C 标准的要求 请求可以分为两部分: 设备请求和加密信息 我们来逐一研究一下 设备请求包含两条重要信息 其中一个是证件请求列表 我可以用它来声明 希望向用户请求哪种证件 Spaceship Rentals 想要验证驾照 所以我会将移动驾照的 docType 字符串放入结构中 接下来添加我要请求的驾照的 特定属性 这是通过一组标准化命名空间 和元素标识符来完成的 在本例中 我要请求名字和姓氏 如果这个人年满 21 岁 还要请求用户的肖像照片 以及驾驶权限
设备请求中的另一个重要参数 就是所谓的 Reader Authentication All 列表 这是网站签署请求的地方 我们稍后会用到这个属性 这里暂时留空 请求的第二部分是加密信息 这里放置的是证件提供程序用来 加密响应的参数
我需要生成用于加密的随机数 随机数是个重要的安全功能 可帮助保护我们免受回放攻击 我还要生成收件人加密密钥对 这个密钥对将在证件响应加密时用到 我会将接收人的公钥放入 Encryption Information Structure 并保留收件人私钥 以备后用 这个私钥可以让我最终解密证件响应 因此 我必须将私钥安全保存在 服务器上 以上这一切共同构成了完整的请求
请求构建完毕后 下一步就是签名了 各个证件提供程序 App 的请求签名要求 可能各不相同 我希望 Spaceship Rentals 接受 Apple 钱包中的 ID 所以我先签署钱包请求
签署请求之前 需要通过 Apple Business Connect 获取签名证书 为此 先生成签名密钥对 然后 向 Apple Business Connect 提交证书签名请求 有了证书 现在就可以在运行时 执行必要的操作 接下来 我需要用两条信息 生成会话文字记录: 我的网站的源 URL 以及之前 生成的加密信息结构 这个会话文字记录 在后面操作中也会用到 有了会话文字记录后 就可以签名了 为此 我将使用签名密钥对 和从 Apple Business Connect 收到的签名证书 就得到了已签名身份验证结构
然后我可以将这个钱包的 已签名身份验证结构 添加到 Reader Authentication All 列表 这个机制根据 ISO 18013-5 而定义 请注意 其他证件提供程序 App 的 请求签名要求 可能略有不同 我想要接受“地方驾照管理局”App 中的证件 但他们要求我用他们签发给我的 另一个完全不同的证书来签署请求
但 Reader Authentication All 是个列表 所以我可以多次签署请求 因此 我利用“地方驾照管理局” 的证书 创建了一个新的已签名身份验证结构 我可以把它放在钱包的 已签名身份验证结构旁边
有了请求之后 下一步就是通过 JaveScript 里的 W3C Digital Credentials API 传递给浏览器 现在我们可以将服务器上生成的 请求数据放到请求字典中 请注意 我还利用标准化 “org-iso-mdoc”字符串 通过“protocol”属性把这个请求 定义为“mdoc”请求 现在我们可以调用 navigator.credentials.get 方法 并等待它响应 这个方法调用会导致 浏览器显示系统 UI 用户可以从中选择数字凭证 请注意 调用 get 方法必须通过 用户手势来完成 比如单击鼠标或按下按钮 一旦收到响应 我们就可以发送到 服务器进行解密 响应是 JSON 可序列化的 因此可以 很容易通过 Fetch API 或者 XHR 发送到服务器 最后 如果出现任何问题 W3C Digital Credentials API 可以提供一组丰富的例外 来帮助程序恢复 或者 也可以选择退回到现有的 身份验证方法 例如通过 HTML 表单上传的 身份证件图像扫描 好的 太棒了! 我们来测试一下代码 确保能正常工作 太棒了! 按下“验证身份”按钮后 可以看到系统 UI 出现 这表明请求有效 然后可以同时看到钱包和 “地方驾照管理局”App 作为用户可以选择的选项 Erik 你认为怎么样? 到目前为止 看起来很棒 Marcos 在进行下一步之前 我来谈谈这个流程的安全性 在处理 ID 数据这样的敏感信息时 要确保适当的安全保护措施 落实到位 这一点非常重要 你可能会提出以下这些问题: 谁在请求 ID 数据? 这个 ID 数据是否受到保护? 是否真实可信? 或者是否被拷贝过? 让我来逐一介绍标准中的 各项安全保护措施 帮助回答这些问题
你已经看到了身份验证请求过程 这是发出请求的网站表明 自己身份的方式 也是证件提供程序 App 帮助用户了解 请求发出人的方式 这是通过用于签署请求的证书 来完成的
接下来是响应加密 响应采用提出请求的网站服务器 所生成的密钥 进行端到端加密 这样可以防止第三方读取身份数据 比如浏览器和操作系统 签发者身份验证可用来证明 身份数据的真实性 这样 提出请求的网站就可以确定 数据是由谁签发的 以及是否应该信任这些数据 还可以防止返回的数据被修改 最后 mdoc 身份验证可防止数据重复 这样 提出请求的网站就可以验证 所收到的 mdoc 是否来自作为 mdoc 签发对象的 同一台设备 这样可以杜绝多台设备之间 复制 mdoc 的 可能性
Marcos 能请你展示一下 这些安全属性在处理响应时 是如何发挥作用的吗? 当然!来吧
要完成 Spaceship Rentals 身份 验证 我需要做的最后一件事就是 处理从证件提供程序返回的响应 与请求一样 JavaScript 响应格式 按照 ISO 18013-7 附录 C 来定义 响应同样包含两个属性 一个是我需要解密的密文 另一个是作为加密过程的一部分 由证件提供程序 App 生成的密钥 密文采用混合公钥加密 HPKE 进行加密 HPKE 按照 RFC-9180 进行定义
用于解密的输入包括响应的密文和 发送方公钥 其中包括我们之前在构建请求时 在服务器上生成的收件人私钥 最后的输入是我们之前为签署请求而 生成的同一个会话文字记录 这个操作最终会得到 解密后的设备响应 响应中的每个证件都包含一个 移动安全对象 这个对象是不可变的 而且由 签发者签名 其中包含的信息对于验证 所返回数据的真实性十分关键 移动安全对象通过 签发者身份验证结构进行身份验证 这个结构包含首先需要验证的 证件签署者证书 证件签署者证书 验证方式是将证书与 签发者发布的可信签发机构根证书 链接起来 Spaceship Rentals 服务器保留 一份可信签发机构根证书列表 用于确定接受哪些 mdoc 如果证件签署者证书不受信任 那么应该丢弃响应 验证证书后 现在需要验证签名 验证完签发者的身份验证结构后 接下来可以验证移动安全对象 这里需要完成许多验证 最重要的是 需要验证所返回元素的 真实性 这些返回的元素可以在 “Issuer Namespaces”中找到 例如 这里可以看到返回的 名字“Kelly” 但在使用前 需要证明这个元素 没有被篡改 为此 我们计算整个元素信息结构的 哈希摘要 然后将摘要与存在于移动安全对象中 的特定摘要进行对比 我可以通过元素结构中提供的 摘要标识符找到要对比的摘要 成功比较摘要后 就可以确信数据是真实的 最后需要验证 mdoc 的真实性 移动安全对象包含设备公钥 这个密钥对于作为证件签发对象的 设备来说是唯一的 然后利用这个密钥来验证 设备身份验证结构 如此一来就能确认证件来自作为 证件签发对象的设备 这就是响应的处理过程 这里介绍的是响应验证工作的 概要 至于需要执行的具体验证过程 请参阅 ISO 18013-5 标准 现在我将测试流程的其余部分 我将选择“钱包”来响应 Spaceship Rentals 请求
然后进行身份验证 现在我们看到流程工作正常 Spaceship Rentals 对相关信息 进行了解密和验证 现在我们可以开着租来的飞船 去兜风了! Erik 你觉得怎么样? 干得漂亮! 我来总结一下 在实现过程中亮眼的一些主要好处 首先 Digital Credentials API 为那些 需要在网上验证身份的用户 提供了一流的使用体验 这毋庸置疑 集成 API 后 你的网站就可以访问 用户友好的平台功能 例如跨设备流 其次 请求 mdoc 的网站正在实施 一套通用标准 这意味着你编写的代码可以在任何 支持这些标准的浏览器上使用 这扩大了互操作性 最后 API 更加安全 除了前面提到的保护措施之外 这个 API 让证件提供程序 App 能够 对提出请求的网站执行域验证 这使得网络钓鱼攻击更难执行
这样 与 W3C Digital Credentials API 集成 所需的实现工作就全部完成了 我们构建并签署了请求 通过 Digital Credentials API 发送了请求 然后处理了加密响应 让我把话题从网站请求 mdoc 需要做的工作转移开来 接下来重点介绍证件提供程序 API 这是我们为了让 App 能够 参与在线 mdoc 验证而构建的 之前在与 Spaceship Rentals 执行身份验证时 我可以选择使用第二个 App: “地方驾照管理局”App 这是我们构建的可以存储 我的驾照的示例 App
如果接下来选择 “地方驾照管理局”App 可以看到这个授权 UI 出现 这个 UI 是由 App 实现的 UI App 扩展提供的 如果你已经有提供证件的 iOS App 就能够轻松地将这个扩展 添加到 App 并启用在线身份验证
这个体验得益于新增的身份证件框架 的支持: IdentityDocumentServices 我来介绍一下它的工作原理 第一步在 App 扩展外部进行 每当 App 提供可出示的身份证件时 你将在 iOS 中注册这个证件 这样就可以在选择 UI 中显示 注册证件时 你要提供证件类型 以及你信任哪些证书签发机构 向提出请求的网站提供授权 然后 iOS 会将证件注册信息 保存在设备本地
接下来是身份验证流程 用户将触发这个流程 然后 iOS 使用已存储的 证件注册信息来确定 哪个 App 可以响应请求 然后显示我们之前看到的选择 UI
随后 由用户选择想要使用的 App 之后 iOS 将部分请求发送到 证件提供程序 App 你可能会问自己: “什么是部分请求?” 传入的 ISO 18013 设备请求 包含许多属性 其中包含可解析的原始数据块 这些内容将被编码 以便证件提供程序能够准确地 对签名进行计算和验证 但未经任何用户交互处理就解析 来自网站的原始数据块 可能会对负责用户数据的 操作系统组件构成威胁 为了缓解这种危险 系统会转而从安全沙盒里 解析部分请求 解析请求之前 操作系统会先验证 请求中的签名 得到包含构建 UI 必要信息的 部分请求 例如证件请求和身份验证证书
App 会收到这个部分请求 你可以用来构建在 App 扩展中 显示的 UI
然后 一旦用户授权发布自己的证件 完整的 ISO 18013 设备请求 将发布到证件提供程序 App 这时 证件提供程序 App 会比较这两个请求 确保一致 然后会验证 ISO 18013 设备请求中的签名
验证通过后 App 就可以构建证件响应 并为提出请求的网站加密响应
然后将响应发送回 iOS iOS 再转发到网站 Marcos 你了解 Swift 吗? 略懂 太好了 “地方驾照管理局” 在 App 方面需要一些帮助 你能帮他们集成 证件提供程序 API 吗? 当然了! 来吧 好的 我们需要实现的第一步是注册 这个步骤在“地方驾照管理局” App 创建 mdoc 后 就应该进行 所有注册操作都是通过 IdentityDocumentProviderRegistrationStore 类型进行的 所以我将首先对存储进行初始化 接下来将实例化 MobileDocumentRegistration 对象 这个对象包含注册 mdoc 的信息 地方驾驶当局签发了驾照 因此 我放入移动驾照的标准化证件 类型字符串 你可以通过“mDL” mobileDocumentType 字符串看到 接下来 我可以表明 信任哪些机构密钥标识符 这样 App 就可以适时显示出来 如果收到的请求不是由 这些证书签发机构签署的 App 就会隐藏在选择表中 接下来 我可以提供一个证件标识符 这个标识符可以轻松链接回 App 中的 mdoc 存储空间 注册对象创建好之后 我可以调用 addRegistration() 方法在 iOS 中注册
我已经在 App 中为用户提供了 移除驾照的功能 如果他们移除驾照 我想确保 App 不再显示为可选项 为此 我可以移除与所删除驾照 相匹配的注册信息 通过 removeRegistration() 方法 可以做到这一点 我将传递与我之前创建的 mdoc 注册信息匹配的 证件标识符 在某些情况下 App 可能需要查询 当前存储在系统中的注册信息 通过注册属性可以实现这个效果 然后 我可以循环访问 返回的注册列表并进行检查 接下来是将 UI App 扩展 添加到我的 App 中
为此我可以向 Xcode 项目 添加新目标 并选择“身份证件提供程序”模板
这将生成供我实现的扩展 有两个地方可以填写代码 当用户授权“本地驾照管理局”App 执行在线身份验证时 将调用 performRegistrationUpdates() 方法 这个方法会检查存储在 App 存储中的所有 mdoc 并确保它们都已经在 iOS 中注册 另一个要实现的地方是 “ISO18013MobileDocumentRequestScene” 内容 在这里 我可以构建用户选择 我的 App 时显示的授权 UI 为了实现这个 UI 我将定义一个 RequestAuthorizationView 并将收到的上下文传递给它 我们来看看这个新视图的实现情况 视图接受了 App 扩展提供的 ISO18013MobileDocumentRequestContext 这个类型包含请求信息和发送响应 所需的回调方法
在实现这个视图主体时 UI 有三个主要部分 我需要构建的视图应当包含谁在执行 请求及请求内容等信息 为此 我将定义一个 RequestInfoView 这个视图接受我从 上下文对象收到的请求 这是 Erik 之前谈到的部分请求 接下来我需要实现这个按钮 以便用户“接受”身份验证 这涉及到调用我在视图上定义的 acceptVerification() 方法 我们来实现这个 当我准备好接受验证时 我会对请求上下文对象 调用 sendResponse() 方法 这个方法接受闭包 闭包收到 rawRequest 参数 这就是“ISO18013DeviceRequest” 的用武之地 收到设备请求后 我需要将它与 来自请求上下文对象的部分请求 进行比较 现在我需要验证原始请求的签名 这样能帮我确认这个网站是 我的 App 信任的网站
请求如果看起来不错 我将构建证件响应并进行加密 最后 我将从闭包返回 所生成的响应数据 然后 返回的响应 将发送回提出请求的网站
这就是 acceptVerification() 方法 的实现方式
要完成 UI 要做的最后一件事 是“拒绝”按钮 要实现这个功能 只需要调用 请求上下文的 cancel 方法
这就是“地方驾照管理局”App 的 基本实现方式 Erik 谢谢 Marcos
在线 mdoc 验证流程就介绍到这里了 我们介绍的两个 API 具有 极大的灵活性 可在你的网站上 实现各种身份验证体验 我们认为这是 网上身份验证的最佳方案 在结束之前 下面还有一些后续步骤 供你在集成 Digital Credentials API 时参考 如果你是网站开发者 并有兴趣 请求“钱包”中 ID 的身份信息 可以考虑在 Apple Business Connect 注册 并获得证书 如果你想从其他 App 例如当地政府的 App 请求身份信息 请与他们联系 了解其他用户引导要求 如果你是 App 开发者 并有兴趣提供身份证件 请在 App 中实现 身份证件提供程序 App 扩展 无论你使用哪个 API 请查看 我们在整个讲座中所讨论的各种标准 这些就是你的数据源 可以帮助你了解 实现过程的细节
非常感谢大家观看我们的讲座 祝你们在 WWDC 度过美妙的时光!
-
-
- 0:00 - 简介
这个讲座重点介绍如何使用数字身份证件增强在线身份验证流程,尤其是符合 ISO 18013-5 标准的移动证件 (mdocs)。 与传统的实体身份证件相比,Mdocs 提供了更加安全、私密和便捷的体验。用户可以将 mdocs 存储在“Apple 钱包”之类的 App 中,“Apple 钱包”在美国部分地点已支持现场身份验证。 即将发布的版本将在 Safari 浏览器和 WebKit 中引入对 W3C 数字凭证 API 的支持,从而实现跨设备和平台的在线身份验证。用户可以选择用于验证的 App,查看请求的信息,并通过面容 ID 等生物识别认证进行授权。标准化的流程确保不同操作系统和浏览器之间的互操作性,让个人和企业都能享受到更加便捷、可信的在线身份验证。
- 6:17 - Digital Credentials API
这个系统采用行业领先的标准,包括 W3C 数字凭证 API 和 FIDO CTAP 协议,可实现无缝的跨平台身份验证。这一流程兼顾易用性与安全性,用户可以使用存储在 iPhone 上的移动证件,在各种浏览器和操作系统上完成身份验证。 对于开发者而言,有两个主要入口点:用于 iOS App 的证件提供程序 API 和用于网站的 W3C 数字凭证 API。 网站必须遵循三步流程:生成并签署证件请求,使用数字凭证 API 将请求传递给浏览器,然后将加密响应发送到服务器进行解密和验证。W3C 数字凭证 API 用于通过标准化的“org-iso-mdoc”字符串向用户请求数字凭证。 讲座中还通过一个详细示例说明了驾驶执照验证过程中的相关细节。
- 22:38 - Document Provider API
借助文档提供程序 API,App 能够参与在线移动证件 (mdoc) 的验证。 当用户启动身份验证时,iOS 会显示已注册的证件提供程序 App 的选择 UI。然后,所选 App 在安全沙盒中收到来自 iOS 的部分请求。用户授权后,完整请求将发布,App 会验证签名、生成响应并将响应加密发送到请求网站。 这个过程包括将证件注册到 iOS 系统中,并指定它的类型和受信任的证书颁发机构。注册完成后,证件在验证期间就可供选择,之后 App 会处理安全验证并将 mdoc 数据传输到网站。 讲座讨论了一个示例 UI App 扩展,并通过 Xcode 将它添加到示例 App,以实现在线身份验证。 授权 UI 由三个主要部分组成:显示请求信息的视图、“接受”按钮和“拒绝”按钮。轻点“接受”后,App 会验证请求,加密证件响应,并将响应发送回请求网站。如果请求无效,则会被拒绝。 此外,还讨论了注册 Apple Business Connect 以获取证书,用于从“钱包”中的身份证件请求身份信息的其他注意事项。