大多数浏览器和
Developer App 均支持流媒体播放。
-
探索可验证的健康记录
了解如何安全地请求访问他人的可验证健康记录,并将该数据安全导入到您的 app 中。健康 app 帮助人们下载、查看并共享其健康记录,包括新冠免疫和检测结果,iOS 15 支持 SMART 健康卡,一种采用 FHIR 健康数据标准的可验证健康记录。我们将向您展示您的 app 如何请求访问此记录,以及您要如何使用 CryptoKit 和发布者公钥验证文件签名。
资源
- Accessing a User’s Clinical Records
- Accessing Data from a SMART Health Card
- Accessing Health Records
- HKVerifiableClinicalRecord
- HKVerifiableClinicalRecordQuery
相关视频
WWDC20
-
下载
嗨 我叫安妮 是健康记录团队的 软件工程师 今天 我的同事卡里要和我一起 向你展示如何让大家使用HealthKit 分享可验证的健康记录 在我们深入研究 可验证的健康记录之前 我想简单地重新介绍 我们在2018年 为iOS 11.3推出的健康记录功能 健康记录允许用户 连接到他们的提供者 并将他们的病历安全地下载到 健康app中 以便于存储 和可视化 这一切都建立在行业标准之上 例如健康信息交换第七层协议的 快捷式医疗服务互操作资源 或简称为FHIR 获得用户许可后 你的app可以访问用户 通过HealthKit下载的 这些健康记录 有关现有健康记录API的 更多详细信息 我鼓励你查看我们的 WWDC 2018视频 《使用HealthKit访问健康记录》 以了解更多信息 对于iOS 15 我们正在利用我们的健康记录工作 来允许下载、存储 和共享基于智慧健康卡 规范实施的 健康app中可验证的记录 让我们来看看 什么是可验证的健康记录 以及它们与你目前可以使用 HealthKit查询的 健康记录数据有何不同 首先 一份可验证的健康记录包含 多个FHIR资源 包括一个患者资源 和一个或多个临床资源 这些资源被打包在 我们所谓的智慧健康卡中 发行人或建立可验证健康记录的 机构 例如实验室 或医疗保健提供者以加密方式 将此智慧健康卡 签署为JSON网络签名或JWS 最后 发行人生成可验证的健康记录 以便它们仅包含有关患者 及其临床数据的必要信息 为了更清楚地了解这些要点 让我们看一个例子 就本例而言 该记录包含两个FHIR免疫资源 每一剂疫苗一项 还包括一个FHIR患者资源 以确定谁接种了疫苗 然后将这些资源组合成 一张智慧健康卡 其原始形式如下所示 智能健康卡内容包括的数据有 类型 其中包含声明在 健康卡中预期的 数据类型的网址 以及凭证主题 其中包括FHIR版本 和包含免疫和患者资源的 Bundle资源 然后将智慧健康卡签名为JWS 它有两个组件:头部和内容 JWS头部包含用于 签署JWS的算法;公钥指纹 它指定了哪个发行者的哪个公钥 进行签名;以及用于压缩内容的算法 压缩的JWS负载 以及凭证主题 包含其他声明数据 包括发行者网址 发行者的公钥所在的位置 发行日期和可选的到期日期 在原始形式下 这就是可验证的健康记录的样子 有关更多信息 我们鼓励你 通过与本次课程相关的连结 访问智慧健康卡规范 既然我们已经讨论了 可验证的健康记录是什么样子 让我向你展示如何将这些记录 导入健康app 一个选择是使用现有的健康记录功能 用户可以将 可验证的健康记录下载到 健康app 通过连接 支持健康记录的提供商 请注意 此选项仅在 “健康记录”功能可用的情况下使用 该功能目前在美国、英国 和加拿大可用 用户还可以选择下载 带有.smart-health-cards文件的 扩充功能或扫描 嵌有智能健康卡文件中的二维码 这将在健康app中 显示以下表格 用户可以在其中查看详细信息 并选择是否下载这些记录 这两个选项在国际上是可行的 最后 如何使用HealthKit 请求访问这些数据? 我们正在引入一个 新的HealthKit查询 HKVerifiableClinicalRecordQuery 和一个新的HKSample子类 HKVerifiableClinicalRecord 用于iOS 15 与其他HKQuery子类不同 要使用这个查询 你必须请求可验证健康记录的 HealthKit访问权限 虽然你仍然可以访问 SDK中的公共标头 但结果处理程序 将返回一个没有授权的 授权拒绝错误 有关如何开始的信息 请参阅与本次课程相关的连结 在我们深入研究查询和范例类别之前 让我们看一下可验证健康记录的授权 这与你使用健康记录时 可能使用的授权 略有不同 首先 可验证的健康记录 观察了每个样本的授权模式 其中用户选择单个样本 而不是类型 与你的app共享 这种类型的授权为用户提供了 对其数据的更精细控制 并且对于保护他们的隐私很重要 当前的HealthKit授权模式 包括两个步骤: 首先请求用户授权 要读取和共享的类型 然后在获得授权后查询范例 对可验证的健康记录 就不需要这第一步 相反 一旦创建和执行了 HKVerifiableClinicalRecordQuery 的实例 就会显示一个授权表单 允许用户选择与你的app 共享哪些个人记录 共享后 选择的记录将返回到 查询的结果处理程序 此外 可验证健康记录的 授权仅为一次性 与第三方app共享这些记录 不会建立长期访问授权 每次执行 HKVerifiableClinicalRecordQuery 都会显示 此授权表单 并将用户选择的记录返回到 结果处理程序 现在我们已经讨论了授权 让我们更详细地看一下 HKVerifiableClinicalRecordQuery 要初始化 HKVerifiableClinicalRecordQuery 首先必须提供记录类型的字符串数组 我们之前将其定义为 可验证健康记录中出现的数据类型 只有所有提供的记录类型的记录 才会显示在授权表单中 与其他HealthKit查询一样 你也可以选择添加谓词 来进一步筛选范例以进行授权 我们提供了一个方便的构造函数 来为日期间隔内 具有相关日期的记录创建谓词 一旦执行查询 用户点击“共享一次” 授权的 HKVerifiableClinicalRecords 就会在结果处理程序中返回 记录包括有关主体 和发行人的基本信息 当然还有JWS属性 其中将包含你将验证 和解码的原始数据 现在我们已经了解了可验证健康记录 功能及其API 我把后面交给卡里 来指导你如何导入测试数据 使用API请求记录 以及验证记录的JWS 谢谢 安妮 大家好 我叫卡里 我也是健康记录团队的 工程师 今天 我将向你介绍如何使用 可验证的健康记录 所以开始使用这个新功能的最好方法 是将一些测试数据 加载到HealthKit中 正如安妮所提到的 你可以使用 三种不同的方法来开始 如果你在美国、加拿大或英国 你只需使用健康app中 现有的健康记录功能 连接到提供商即可 我们新增了另一种方法 是下载.smart-health-card文件 你可以在smarthealth.cards 规范网站上找到该文件的示范 第三种方法是扫描QR码 我们去找一些数据吧 对于此示范 你可以尝试新的QR码导入 你将从执行iOS 15的设备开始 并扫描此QR码 扫描后 你会收到直接打开 健康app的提示 切换到健康app后 它会立即开始引导你 导入此健康卡 选择“新增至健康”选项后 导入过程就完成 你可以滚动到浏览标签 并在免疫部分查看导入的记录 如果你继续点击这个类别 你现在可以看到你的疫苗 和签名已经被健康app验证 现在你有一些签名记录导入到 健康app中 你可以继续 从你自己的app要求这些记录 现在 让我们来看一下 你的app如何访问这个新API的示范 首先 你将从导入HealthKit开始 接下来 你将建立一个HealthStore 如果你使用过标准HealthKit授权API 你可能已经熟悉这样的操作 你还将建立一个记录类型列表 以指定 你希望用户与你共享的数据类型 授权时 你将看到一个只匹配 这些记录类型的数据列表 接下来 你将建立一个谓词 指定 要共享的范本的有效日期范围 在此示范中 你可以看到在过去七天内 进行的实验室正在被请求 然后 你将使用 构造的recordTypes 和谓词建立查询 并使用一个完成来检查 呈现的示范是否与你的app共享 最后 执行查询将 显示授权表 结果可能被选择与你的app共享 每次执行此方法时 都会出现此对话框 现在 你已检索到一段 已签名的临床数据 你可以写一些代码来验证它的签名 在你的app中 回顾一下 数字签名是一种验证数字信息 真实性的数学方法 此过程可以由任何设备执行 例如服务器或其他移动设备 但让我们看看如何 在你的app中执行此操作 你可以通过四个主要步骤来完成 首先 你将使用Codable 解析临床数据 接着 你将解压缩已签名的JWT内容 第三 你将从发行人的网站下载公钥 最后 你将使用CryptoKit 来验证签名 让我们首先看看如何为签名记录 定义数据模型 JSON Web签名规范中 正式定义了该模型 该结构由三个主要部分定义: 标头、内容和签名 你可以使用Swift Codable 为你进行解析 你应该保留标头和内容的 原始表示 以便在签名验证期间使用 最重要的是 你将添加一个初始值设定项 来从其压缩的序列化形式解析JWS 接下来 你将建立一个 用于表示JWS标头的结构 在从压缩序列化初始化过程中 以及在签名验证过程中 你会需要它 你可以在标头中看到 这里可以找到指定的签名算法 用于保存公钥指纹的 key-ID字段 和压缩算法 公钥指纹用于识别 发行人的哪个密钥用于签署JWS 这个过程需要ES256签名算法 和DEF压缩算法 这两种算法都由第一方Swift库支持 现在让我们看看从JWS的压缩序列化 解析JWS所需的代码 首先将序列化字符串 拆分为其组成部分 每个部分都是Base64URL编码的 在创建JSONDecoder 和Base64URL标头 和内容进行解码后 你可以检查 标头是否表明内容被正确压缩 检查压缩后 你将使用 在提供的示范项目中找到的实用方法 来解压缩内容 你需要的下一个部分 是对健康卡内容进行建模的结构 这里最重要的两个部分是发行人字段 它将保存发行人的Web识别码 你可以用来获取它们的密钥 另一个是VC字段 它保存所有患者数据 有关如何解析VC字段 和分析其内容的更多信息 请查看WWDC 2020的 《处理FHIR而不被烧伤》演讲 现在你已经了解了如何解析JWS 你已经准备好验证它的真实性了 让我们看看建利一个扩充功能 将添加验证方法加到JWS结构中 由于你将直接访问发行人的网站 来检索他们的签名密钥 因此你可以使用Combine来帮助 处理此过程的异步方面 并且可以使用CryptoKit来帮助 进行签名验证 在验证方法中 首先要提取发行人的识别码 该识别码始终是发行人的网址 在这里 你可以新增自己的方法 来检查网址是否 是你个人信任的网址 如果它是你不想接受的结果 则中止 接下来 你将建立一个网址 通过附加标准的 .wellknown/jwks.json网址路径 来检索发行人的密钥 此路径后缀在规范中定义 并且对于所有发行人都应该是相同的 现在你已经构建了已知的网址 你可以连接到发行者 下载他们的密钥 并完成签名验证 你将通过建立一个 URLSessiondataTaskPublisher 来完成此方法的编写 它将连接到发行者已知的jwk端点 然后 你可以将其映射到数据 使用jsonDecoder 将其解码为一组JWKs 最后将其映射到一个布尔值 指示签名是否有效 在最后的映射块中 你将根据JWS标头指示的内容 选择发行人的密钥 最后一部分涉及使用CryptoKit 来验证签名 根据JWS规范 数据的签名部分是通过连接 Base64URL编码的标头 和用句点连接的内容形成的 接下来 将下载的JWK密钥转换为 CryptoKit P256签名密钥 你将使用可在本演讲随附的 示范项目中找到的实用方法 最后 你将使用CryptoKit的 isValidSignature方法 进行签名验证 现在你的数据模型和验证其真实性 所需的所有逻辑都已定义 那么就可以将所有内容放在一起了 看一下前面如何调用新API的 示范 你可以用一个对新验证方法的 调用来替换此注释 由于API会返回所有选定范例的列表 因此你可以从列表中选择第一个 接下来 将其从数据解析为字符串 然后使用你的压缩序列化 初始值设定项解析它 最后 调用你的新验证方法 并监听发出的布尔结果 就像这样 我们已经看到了 如何获取一份已签名的临床数据 下载发行人的签名密钥 并验证这些记录的签名 现在 让安妮来总结一下 谢谢 卡里 在我们结束之前 我想谈谈 关于可验证健康记录有关的隐私 希望我在本次课程中已经有明确表示 可验证的健康记录功能 是在考虑用户隐私的情况下构建的 首先 智能健康卡规范使用数据配置文件 最大限度地减少发行人应包含 在每条记录中的信息 健康app旨在保护敏感的健康数据 因此当手机被锁定时 健康app中的所有健康 和健身数据都会被加密 其中包括可验证的健康记录 要获得可验证的健康记录需要申请 一项权利 该权利将附带额外的义务 以确保这些敏感的健康数据不被滥用 最后 用户可以控制如何 与你的app共享可验证的健康记录 让我们回顾一下我们今天讨论的内容 在iOS 15中 基于健康记录 我们导入了可验证记录 到健康app中 并让开发人员 使用新API读取这些数据 总结一下 这是你接下来可以做的事情 首先 要了解更多 有关可验证健康数据生态系统的信息 请查看智慧健康卡规范 将测试记录导入健康app 以亲自试用 下载示范app 其中展示了 如何查询和验证这些测试记录 最后 当你准备好发布你的app时 请求HealthKit访问权限 以获取可验证的健康记录 感谢收看 祝你在WWDC玩得开心 [音乐]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。