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

SMART on FHIR 概述

可替换的医疗应用程序和可重用技术 (SMART on FHIR) 是一种医疗保健标准,应用程序可以通过数据存储访问临床信息。 它将基于开放标准(包括 OAuth2 和 OpenID Connect)的安全层添加到 FHIR 接口,以实现与 EHR 系统集成。 使用 SMART on FHIR 至少提供三个重要优势:

  • 应用程序有一种已知的方法来获取对 FHIR 存储库的身份验证/授权。
  • 使用 SMART on FHIR 访问 FHIR 存储库的用户仅限于与用户关联的资源,而不是有权访问存储库中的所有数据。
  • 用户可以使用 SMART 临床范围向应用程序授予对其一组进一步有限数据的访问权限。

以下教程介绍了通过 FHIR 服务启用 SMART on FHIR 应用程序的步骤。

先决条件

使用 AHDS 的 SMART on FHIR 示例 OSS (SMART on FHIR (增强) )

步骤 1:设置 FHIR SMART 用户角色

按照 管理用户:将用户分配到角色部分中列出的步骤进行操作。 如果添加到角色的任何用户(“FHIR SMART 用户”)的请求符合 SMART on FHIR 实现指南(例如具有访问令牌的请求,其中包括 fhirUser 声明和临床范围声明),则他们将能够访问 FHIR 服务。 然后,授予具有此角色的用户的访问权限将受到与其 fhirUser 隔离舱关联的资源和临床范围限制的限制。

步骤 2:FHIR 服务器与示例的集成

按照 Azure 运行状况数据服务示例 OSS 中的步骤操作。 这将启用 FHIR 服务器与其他 Azure 服务 ((例如 APIM、Azure Functions 等) )的集成。

注意

示例是开放源代码,应在使用 GitHub 之前查看其信息和许可条款。 它们不是 Azure 运行状况数据服务的一部分,不受Microsoft 支持部门支持。 这些示例可用于演示如何将 Azure Health Data Services 和其他开源工具一起使用,以演示使用 Azure Active Directory 作为标识提供者工作流的 ONC (g) (10) 合规性。

SMART on FHIR 代理

单击展开!

注意

这是上述 SMART on FHIR (增强) 的另一个选项。 SMART on FHIR 代理选项仅启用 EHR 启动序列。

若要使用 SMART on FHIR,必须先对应用进行身份验证和授权。 首次使用 SMART on FHIR 时,还必须获得管理许可才能让应用访问 FHIR 资源。

如果你在应用中没有所有权角色,请与应用所有者联系,并要求他们在应用中向你授予管理员同意。

如果确实具有管理权限,请完成以下步骤以直接向自己授予管理员同意。 (稍后在 app 中出现提示时,你还可以向自己授予管理员同意。) 你可以完成相同的步骤,将其他用户添加为所有者,以便他们可以查看和编辑此应用注册。

若要将自己或其他用户添加为应用所有者,请执行以下操作:

  1. 在 Azure 门户中,转到“Azure Active Directory”。
  2. 在左侧菜单中,选择“ 应用注册”。
  3. 搜索你创建的应用注册,然后选择它。
  4. 在左侧菜单中的 “管理”下,选择“ 所有者”。
  5. 选择“ 添加所有者”,然后添加自己或你想要获得管理员同意的用户。
  6. 选择“保存”

步骤 2:启用 SMART on FHIR 代理

SMART on FHIR 要求 Audience 的标识符 URI 与 FHIR 服务的 URI 相同。 Azure API for FHIR 的标准配置使用 https://azurehealthcareapis.comAudience 值。 但是,你也可以设置与 FHIR 服务的特定 URL 匹配的值(例如 https://MYFHIRAPI.azurehealthcareapis.com)。 使用 SMART on FHIR 代理时必须这样做。

若要在 Azure API for FHIR 实例的身份验证设置中启用 SMART on FHIR 代理,请选择“SMART on FHIR 代理检查框:

显示启用 SMART on FHIR 代理的屏幕截图。

SMART on FHIR 代理充当 SMART on FHIR 应用与 Azure AD 之间的中介。 身份验证回复(身份验证代码)必须进入 SMART on FHIR 代理,而不是进入应用本身。 然后,代理会将回复转发到应用。

由于身份验证代码的这种双步中继方式,你需要将 Azure AD 客户端应用程序的回复 URL(回调)设置为由 SMART on FHIR 代理的回复 URL 与 SMART on FHIR 应用的回复 URL 组合而成的 URL。 组合的回复 URL 采用以下形式:

https://MYFHIRAPI.azurehealthcareapis.com/AadSmartOnFhirProxy/callback/aHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMS9zYW1wbGVhcHAvaW5kZXguaHRtbA

在该回复中,aHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMS9zYW1wbGVhcHAvaW5kZXguaHRtbA 是 SMART on FHIR 应用回复 URL 的 base64 编码的 URL 安全式版本。 对于 SMART on FHIR 应用启动器,当应用在本地运行时,回复 URL 将是 https://localhost:5001/sampleapp/index.html

可以使用如下所示的脚本生成组合的回复 URL:

$replyUrl = "https://localhost:5001/sampleapp/index.html"
$fhirServerUrl = "https://MYFHIRAPI.azurewebsites.net"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($ReplyUrl)
$encodedText = [Convert]::ToBase64String($bytes)
$encodedText = $encodedText.TrimEnd('=');
$encodedText = $encodedText.Replace('/','_');
$encodedText = $encodedText.Replace('+','-');

$newReplyUrl = $FhirServerUrl.TrimEnd('/') + "/AadSmartOnFhirProxy/callback/" + $encodedText

将回复 URL 添加到前面为 Azure AD 创建的公共客户端应用程序:

显示如何为公共客户端配置回复 URL 的屏幕截图。

步骤 3:获取测试患者

若要测试 Azure API for FHIR 和 SMART on FHIR 代理,数据库中至少需要有一个患者。 如果尚未与 API 交互,并且数据库中没有数据,请参阅 使用 Postman 访问 FHIR 服务 以加载患者。 请记下具体患者的 ID。

步骤 4:下载 SMART on FHIR 应用启动器

开源的适用于 Azure 的 FHIR 服务器存储库包含一个简单的 SMART on FHIR 应用启动器和一个示例 SMART on FHIR 应用。 本教程将在本地使用 SMART on FHIR 启动器来测试设置。

可使用以下命令克隆 GitHub 存储库并转到应用程序:

git clone https://github.com/Microsoft/fhir-server
cd fhir-server/samples/apps/SmartLauncher

该应用程序需要一些配置设置,可以在 appsettings.json 中进行设置:

{
    "FhirServerUrl": "https://MYFHIRAPI.azurehealthcareapis.com",
    "ClientId": "APP-ID",
    "DefaultSmartAppUrl": "/sampleapp/launch.html"
}

我们建议使用 dotnet user-secrets 功能:

dotnet user-secrets set FhirServerUrl https://MYFHIRAPI.azurehealthcareapis.com
dotnet user-secrets set ClientId <APP-ID>

使用以下命令运行应用程序:

dotnet run

步骤 5:测试 SMART on FHIR 代理

启动 SMART on FHIR 应用启动器后,可将浏览器指向 https://localhost:5001,在其中应会看到以下屏幕:

SMART on FHIR 应用启动器屏幕截图。

输入“患者”、“就诊”或“医师”信息时,会发现“启动上下文”已更新。 使用 Azure API for FHIR 时,启动上下文只是一个 JSON 文档,其中包含有关患者、医师等等的信息。 此启动上下文采用 base64 编码,作为 launch 查询参数传递给 SMART on FHIR 应用。 根据 SMART on FHIR 规范,此变量对于 SMART on FHIR 应用是不透明的,并且将传递给标识提供者。

SMART on FHIR 代理使用此信息来填充令牌响应中的字段。 SMART on FHIR 应用可以使用这些字段来控制它要请求哪个患者的数据,以及如何在屏幕上呈现应用程序。 SMART on FHIR 代理支持以下字段:

  • patient
  • encounter
  • practitioner
  • need_patient_banner
  • smart_style_url

这些字段旨在向应用提供指导,而不会传达任何安全信息。 SMART on FHIR 应用程序可以忽略这些字段。

请注意,SMART on FHIR 应用启动器会在页面底部更新“启动 URL”信息。 选择“ 启动 ”以启动示例应用。

## 后续步骤

了解如何启用 SMART on FHIR 功能后,请参阅搜索示例页,详细了解如何使用搜索参数、修饰符和其他 FHIR 搜索方法进行搜索。

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