You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过FHIR API访问患者数据及实现类OneRecord的认证聚合功能?

针对Epic MyChart FHIR API的脚本认证与数据访问

Epic MyChart基于SMART on FHIR框架实现OAuth2授权,要通过脚本访问自己的数据,核心走授权码流程,步骤如下:

  1. 注册开发者应用
    先在Epic开发者门户完成应用注册,获取client_id和redirect_uri(Epic对第三方应用有审核要求,个人测试需确保符合他们的开发者政策)。

  2. 构造授权请求并获取授权码
    拼接Epic MyChart的授权端点URL,参数包含client_id、redirect_uri、response_type=code、所需权限scope(比如launch/patient patient/*.read)。让用户访问该URL完成登录授权,授权后会跳转到你配置的redirect_uri,并携带code参数。

  3. 交换访问令牌
    用拿到的code、client_id、redirect_uri向Epic的令牌端点发送POST请求,获取access_token和refresh_token。

  4. 调用FHIR API获取数据
    把access_token放在HTTP请求头的Authorization: Bearer {token}中,访问Epic的FHIR基础端点(比如/Patient获取个人信息,/Observation获取检验数据)。

Python脚本示例

import requests

# 替换为你的实际配置
CLIENT_ID = "你的应用Client ID"
REDIRECT_URI = "你的回调URI"
# 替换为医院MyChart的实际域名
BASE_DOMAIN = "https://mychart.your-hospital.org"

# 1. 生成授权URL并引导用户操作
auth_endpoint = f"{BASE_DOMAIN}/oauth2/authorize"
auth_url = (
    f"{auth_endpoint}?client_id={CLIENT_ID}"
    f"&redirect_uri={REDIRECT_URI}"
    f"&response_type=code"
    f"&scope=launch/patient patient/*.read"
)
print(f"请打开以下URL登录授权:\n{auth_url}")
auth_code = input("请输入回调URL中的code参数:")

# 2. 交换访问令牌
token_endpoint = f"{BASE_DOMAIN}/oauth2/token"
token_payload = {
    "grant_type": "authorization_code",
    "code": auth_code,
    "client_id": CLIENT_ID,
    "redirect_uri": REDIRECT_URI
}
token_resp = requests.post(token_endpoint, data=token_payload)
token_resp.raise_for_status()
tokens = token_resp.json()
access_token = tokens["access_token"]

# 3. 调用FHIR API获取患者数据
fhir_base_url = f"{BASE_DOMAIN}/fhir/api/FHIR/DSTU2"
headers = {"Authorization": f"Bearer {access_token}"}
patient_resp = requests.get(f"{fhir_base_url}/Patient", headers=headers)
patient_resp.raise_for_status()
print("获取到的患者数据:")
print(patient_resp.json())

实现类似健康数据聚合平台的医院端点发现与跨门户认证

这类平台的核心是自动发现FHIR端点+统一OAuth2授权流程适配,具体逻辑如下:

一、医院FHIR端点自动发现

  1. SMART on FHIR标准发现机制
    所有合规的FHIR服务器都会暴露/.well-known/smart-configuration端点,访问该URL可获取完整的授权、令牌、FHIR基础URL等配置信息。比如输入医院域名https://mychart.your-hospital.org,直接请求https://mychart.your-hospital.org/.well-known/smart-configuration就能拿到所有必要的API端点地址。

  2. 维护预验证医院目录
    自动发现可能存在不稳定性,聚合平台通常会维护一个人工验证过的医院列表,存储每个医院的域名、FHIR版本、支持的权限范围等信息,减少自动发现的出错概率。用户搜索医院时,直接匹配列表中的条目,再调用对应域名的配置端点。

二、跨门户认证实现

  1. 统一OAuth2授权流程(带PKCE)
    对于每个医院,根据发现的配置构造授权请求,在弹窗中打开医院的登录授权页面(避免页面跳转丢失平台会话)。前端应用必须使用**PKCE(Proof Key for Code Exchange)**增强安全性,无需存储client_secret,适合浏览器环境。

  2. 令牌管理与会话同步
    用户完成单个医院的授权后,平台存储该医院对应的access_token和refresh_token,后续调用该医院的FHIR API时直接复用令牌。同时维护用户的统一会话,让用户在平台内切换医院时无需重复登录。

  3. 动态适配权限范围
    不同医院的FHIR API支持的权限scope可能不同,平台需根据发现的配置动态调整授权请求中的scope参数,确保能获取到所需的数据权限。


内容的提问来源于stack exchange,提问作者Rabot Snek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:07:26