你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
Azure API for FHIR 将于 2026 年 9 月 30 日停用。 请按照迁移策略,在该日期之前转换到Azure Health Data Services FHIR® 服务。 由于 Azure API for FHIR 停用,从 2025 年 4 月 1 日开始,不允许使用新的客户部署。 Azure Health Data Services FHIR 服务是 Azure API for FHIR 的演化版本,可让客户管理 FHIR、DICOM 和医疗技术服务,并集成到其他 Azure 服务。
使用医疗保健数据时,请务必确保数据安全并且不能由未经授权的用户或应用程序访问。 FHIR 服务器使用 OAuth 2.0 确保此数据的安全性。 Azure API for FHIR 是使用 Microsoft Entra ID 进行保护的,这是 OAuth 2.0 标识提供者的示例。 本文概述了 FHIR 服务器授权以及获取令牌以访问 FHIR 服务器所需的步骤。 以下步骤适用于任何 FHIR 服务器和任何标识提供者。 在本文中,我们将以 Azure API for FHIR 作为 FHIR 服务器,并使用 Microsoft Entra ID 作为标识提供者进行讲解。
访问控制概述
为了让客户端应用程序能够访问 Azure API for FHIR,它必须提供一个访问令牌。 访问令牌是一个经过签名并使用 Base64 编码的属性(声明)集合,用于传达有关客户端标识、角色以及授予客户端的权限等信息。
可通过多种方式来获取令牌。 Azure API for FHIR 不考虑令牌的获取方式,只要该令牌是具有正确声明的正确签名令牌即可。
例如,使用授权代码流时,访问 FHIR 服务器需执行以下四个步骤:
- 客户端向 Microsoft Entra ID 的
/authorize
终结点发送一个请求。 Microsoft Entra ID 将客户端重定向到登录页面,用户将在这里使用相应的凭据(例如,用户名加密码或双因素身份验证)进行身份验证。 有关详细信息,请参阅获取授权代码。 成功完成身份验证后,授权代码将返回到客户端。 Microsoft Entra ID 将只允许将此授权代码返回到在客户端应用程序注册中配置的注册回复 URL。 - 客户端应用程序在 Microsoft Entra ID 的
/token
终结点处交换访问令牌的授权代码。 当你请求令牌时,客户端应用程序可能需要提供客户端密码(应用程序密码)。 有关详细信息,请参阅获取访问令牌。 - 客户端向 Azure API for FHIR 发出请求,例如
GET /Patient
表示搜索所有患者。 客户端发出请求时,它将访问令牌包含在 HTTP 请求头中,例如Authorization: Bearer eyJ0e...
,其中eyJ0e...
表示 Base64 编码的访问令牌。 - Azure API for FHIR 验证令牌是否包含相应声明(令牌中的属性)。 如果所有内容都已签出,则它将完成请求,并将包含结果的 FHIR 捆绑包返回到客户端。
需要特别注意的是,Azure API for FHIR 不涉及验证用户凭据,也不会颁发令牌。 身份验证和令牌创建是通过 Microsoft Entra ID 来完成的。 Azure API for FHIR 只是验证令牌是否已正确签名(它是否可信)和是否具有相应声明。
访问令牌的结构
开发快速医疗保健互操作性资源 (FHIR®) 应用程序时,通常涉及调试访问问题。 如果客户端被拒绝访问 Azure API for FHIR,则了解访问令牌的结构以及如何对其进行解码以检查令牌内容(声明)很有用。
FHIR 服务器通常需要 JSON Web 令牌(JWT,有时发音为“jot”)。 它由以下三个部分组成。
第 1 部分:标头,例如:
{
"alg": "HS256",
"typ": "JWT"
}
第 2 部分:有效负载(声明),例如:
{
"oid": "123",
"iss": "https://issuerurl",
"iat": 1422779638,
"roles": [
"admin"
]
}
第 3 部分:签名,它是通过串联标头和有效负载的 Base64 编码内容并根据标头中指定的算法 (alg
) 计算这些内容的加密哈希计算得出的。 服务器将能够从标识提供者获取公钥,并验证此令牌是否由特定的标识提供者颁发且未被篡改。
完整的令牌由这三段的 Base64 URL 编码的版本组成。 这三段串联起来并以 .
进行分隔。
令牌的示例如下所示。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvaWQiOiIxMjMiLCAiaXNzIjoiaHR0cHM6Ly9pc3N1ZXJ1cmwiLCJpYXQiOjE0MjI3Nzk2MzgsInJvbGVzIjpbImFkbWluIl19.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI
可通过工具(如 https://jwt.ms)对令牌进行解码和检查。 令牌解码的结果是:
{
"alg": "HS256",
"typ": "JWT"
}.{
"oid": "123",
"iss": "https://issuerurl",
"iat": 1422779638,
"roles": [
"admin"
]
}.[Signature]
获取访问令牌
如前所述,可通过多种方式从 Microsoft Entra ID 获取令牌,有关详细信息,请参阅 Microsoft Entra 开发人员文档。
使用以下任一身份验证协议。
获取令牌的方式还有其他变体(例如由于不同的流)。 有关详细信息,请参阅 Microsoft Entra 文档。 使用 Azure API for FHIR 时,还有一些使用 Azure CLI 获取访问令牌(例如用于调试目的)的快捷方式。
后续步骤
在本文档中,你了解了一些涉及到使用 Microsoft Entra ID 保护对 Azure API for FHIR 的访问的基本概念。 有关如何部署 Azure API for FHIR 服务的信息,请参阅
注释
FHIR® 是 HL7 的注册商标,经 HL7 许可使用。