你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 健康数据服务的身份验证和授权

身份验证

Azure Health Data Services 是使用 Azure Active Directory (Azure AD)(支持 OAuth 2.0 的全球标识提供者)的受保护托管服务的集合。

若要使 Azure 运行状况数据服务访问 Azure 资源(如存储帐户和事件中心),必须 启用系统托管标识,并授予对托管标识 的适当权限 。 有关详细信息,请参阅 Azure 托管标识

Azure Health Data Services 不支持其他标识提供者。 但是,可以使用自己的标识提供者来保护应用程序,并通过管理客户端应用程序和用户数据访问控制使它们能够与 Health Data Services 交互。

客户端应用程序在 Azure AD 中注册,可用于访问 Azure Health Data Services。 用户数据访问控制在实现业务逻辑的应用程序或服务中完成。

应用程序角色

必须为 Azure Health Data Services 的经过身份验证的用户和客户端应用程序授予适当的应用程序角色。

Azure Health Data Services 的 FHIR 服务提供以下角色:

  • FHIR 数据读取者:可以读取 (和搜索) FHIR 数据。
  • FHIR 数据编写器:可以读取、写入和软删除 FHIR 数据。
  • FHIR 数据导出程序:可以读取和导出 ($export 运算符) 数据。
  • FHIR 数据导入程序:可以读取和导入 ($import 运算符) 数据。
  • FHIR 数据参与者:可以执行所有数据平面操作。
  • FHIR 数据转换器:可以使用转换器执行数据转换。
  • FHIR SMART 用户:角色允许用户根据 SMART IG V1.0.0 规范读取和写入 FHIR 数据。

Azure Health Data Services 的 DICOM 服务提供以下角色:

  • DICOM 数据所有者:可以读取、写入和删除 DICOM 数据。
  • DICOM 数据读取:可以读取 DICOM 数据。

MedTech 服务不需要应用程序角色,但它确实依赖于“Azure 事件中心数据接收器”来检索存储在客户订阅的事件中心中的数据。

授权

获得适当的应用程序角色后,经过身份验证的用户和客户端应用程序可以通过获取 Azure AD 颁发的 有效访问令牌来访问 Azure Health Data Services,并执行应用程序角色定义的特定操作。

  • 对于 FHIR 服务,访问令牌特定于服务或资源。
  • 对于 DICOM 服务,访问令牌授予 dicom.healthcareapis.azure.com 资源,而不是特定服务。
  • 对于 MedTech 服务,访问令牌不是必需的,因为它不会向用户或客户端应用程序公开。

授权步骤

获取访问令牌有两种常见方法,Azure AD 文档对此进行了详细介绍: 授权代码流客户端凭据流

下面介绍如何使用 授权代码流获取 Azure Health Data Services 的访问令牌:

  1. 客户端将请求发送到 Azure AD 授权终结点。 Azure AD 将客户端重定向到登录页,用户在其中使用适当的凭据 (进行身份验证,例如:用户名和密码,或双重身份验证) 。 成功完成身份验证后,授权代码将返回到客户端。 Azure AD 仅允许将此授权代码返回到客户端应用程序注册中配置的已注册回复 URL。

  2. 客户端应用程序在 Azure AD 令牌终结点上交换访问令牌的授权代码。 当客户端应用程序请求令牌时,应用程序可能必须提供客户端机密 (可在应用程序注册) 期间添加该密码。

  3. 客户端向 Azure Health Data Services 发出请求,例如, GET 请求搜索 FHIR 服务中的所有患者。 请求 在请求标头中包含 HTTP 访问令牌,例如 Authorization: Bearer xxx

  4. Azure Health Data Services 验证令牌是否包含令牌) 中的相应声明 (属性。 如果有效,它将完成请求并将数据返回给客户端。

客户端凭据流中,权限直接授予应用程序本身。 当应用程序向资源提供令牌时,资源会强制应用程序本身具有执行操作的授权,因为身份验证没有涉及任何用户。 因此,它与 授权代码流 在以下方面有所不同:

  • 用户或客户端不需要以交互方式登录。
  • 不需要授权代码。
  • 访问令牌直接通过应用程序权限获取。

访问令牌

访问令牌是一个已签名的 Base64 编码的属性集合, (声明) ,用于传达有关授予用户或客户端的客户端标识、角色和特权的信息。

Azure Health Data Services 通常需要 JSON Web 令牌。 该令牌由三个部分组成:

  • 标头
  • 有效负载 (声明)
  • 签名,如图所示。 有关详细信息,请参阅 Azure 访问令牌

JASON Web 令牌签名。

使用等 https://jwt.ms 联机工具查看令牌内容。 例如,可以查看声明详细信息。

声明类型 备注
aud https://xxx.fhir.azurehealthcareapis.com 标识令牌的目标接收方。 在 id_tokens 中,受众是在 Azure 门户中分配给应用的应用程序 ID。 如果值不匹配,应用应验证此值并拒绝令牌。
iss https://sts.windows.net/{tenantid}/ 标识构造并返回令牌的安全令牌服务 (STS),以及对用户进行身份验证的 Azure AD 租户。 如果令牌由 v2.0 终结点颁发,则 URI 以 /v2.0 结尾。 表示用户是来自 Microsoft 帐户的使用者用户的 GUID 为 9188040d-6c67-4c5b-b112-36a304b66dad。 应用应使用声明的 GUID 部分来限制可以登录到应用的租户集(如果适用)。
iat (时间戳) “Issued At”表示针对此令牌进行身份验证的时间。
nbf (时间戳) “nbf”(不早于)声明指定只能在哪个时间之后接受 JWT 的处理。
exp (时间戳) “exp”(过期时间)声明指定只能在哪个时间(含)之前接受 JWT 的处理。 请注意,资源可能会在此时间之前拒绝令牌,例如,如果需要更改身份验证,或者检测到令牌吊销。
aio E2ZgYxxx 一个内部声明,Azure AD 用它来记录有关重复使用令牌的数据。 应忽略。
appid e97e1b8c-xxx 使用令牌的客户端的应用程序 ID。 该应用程序可以自身名义或者代表用户进行操作。 应用程序 ID 通常表示应用程序对象,但它还可以表示 Azure AD 中的服务主体对象。
appidacr 1 表示对客户端进行身份验证的方式。 对于公共客户端,该值为 0。 如果使用客户端 ID 和客户端机密,则该值为 1。 如果使用客户端证书进行身份验证,值为 2。
idp https://sts.windows.net/{tenantid}/ 记录对令牌使用者进行身份验证的标识提供者。 此值与颁发者声明的值相同,除非用户帐户与颁发者(例如来宾)不在同一租户中。 如果声明不存在,则表示可以改用 iss 的值。 例如,对于在组织上下文 (使用的个人帐户,个人帐户受邀加入 Azure AD 租户) ,idp 声明可能是“live.com”或包含 Microsoft 帐户租户 9188040d-6c67-4c5b-b112-36a304b66dad 的 STS URI。
oid 例如,tenantid 在 Microsoft 标识系统中,对象的不可变标识符在这种情况下是用户帐户。 此 ID 可跨应用程序唯一标识用户 - 同一用户登录的两个不同应用程序在 oid 声明中收到相同的值。 Microsoft Graph 将此 ID 作为给定用户帐户的 ID 属性返回。 由于 oid 允许多个应用关联用户,因此需要配置文件范围才能接收此声明。 注意:如果单个用户存在于多个租户中,则用户在每个租户中包含不同的对象 ID - 即使用户使用相同的凭据登录到每个帐户,也会将其视为不同的帐户。
rh 0.ARoxxx Azure 用来重新验证令牌的内部声明。 应忽略它。
sub 例如,tenantid 令牌断言信息的原则,例如应用的用户。 此值不可变,无法重新分配或重复使用。 使用者是一个成对标识符 - 它对于特定应用程序 ID 是唯一的。 因此,如果单个用户使用两个不同的客户端 ID 登录到两个不同的应用,则这些应用会收到主题声明的两个不同的值。 根据体系结构和隐私要求,你可能需要此结果,也可能不需要此结果。
tid 例如,tenantid 表示用户所属的 Azure AD 租户的 GUID。 对于工作和学校帐户,该 GUID 就是用户所属组织的不可变租户 ID。 对于个人帐户,值为 9188040d-6c67-4c5b-b112-36a304b66dad。 若要接收此声明,需要配置文件范围。
uti bY5glsxxx Azure 用来重新验证令牌的内部声明。 应忽略它。
ver 1 指示令牌的版本。

默认情况下,访问令牌的有效期为一小时。 可以在新令牌过期之前获取新令牌,或使用刷新令牌续订该令牌。

若要获取访问令牌,可以使用 Postman、Visual Studio Code中的 REST 客户端扩展、PowerShell、CLI、curl 和 Azure AD 身份验证库等工具。

Encryption

创建 Azure Health Data Services 的新服务时,默认使用 Microsoft 管理的密钥 加密数据。

  • 当数据保留在数据存储中时,FHIR 服务提供静态数据的加密。
  • 当映像数据(包括嵌入元数据)保留在数据存储中时,DICOM 服务提供静态数据的加密。 提取元数据并将其保存在 FHIR 服务中时,会自动加密元数据。
  • MedTech 服务在数据映射和规范化后,将设备消息保存到 FHIR 服务,该服务会自动加密。 如果设备消息发送到使用 Azure 存储来存储数据的 Azure 事件中心,则会使用 Azure 存储服务加密 (Azure SSE) 自动加密数据。

后续步骤

本文档介绍了 Azure Health Data Services 的身份验证和授权。 若要了解如何部署 Azure Health Data Services 实例,请参阅

FHIR® 是 HL7 的注册商标,经 HL7 许可使用。