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

如何获取Epic FHIR资源的JWK URL?含Django REST框架疑问

关于Epic OAuth2配置中JWK URL的实现方案

核心结论

Epic要求的JWK URL是你的应用需要自行暴露的端点,用来让Epic获取你的公钥(以JWK格式),从而验证你发送的JWT签名(比如客户端认证时的JWT Assertion)。你调用Epic的smart-configuration端点找不到相关内容是正常的,因为这个URL是你提供给Epic的,而非从Epic获取。

在Django REST Framework中实现JWK端点的步骤

1. 准备RSA密钥对与JWK转换

你已经上传给Epic的公钥需要转换成JWK格式。可以通过以下方式处理:

  • 如果你已有PEM格式的公钥,使用cryptography和pyjwt库转换为JWK。
  • 示例转换代码(可在本地运行生成JWK):
from cryptography.hazmat.primitives import serialization
from jwt.utils import base64url_encode

# 读取PEM公钥
with open("public_key.pem", "rb") as f:
    public_key = serialization.load_pem_public_key(f.read())

# 提取公钥参数
numbers = public_key.public_numbers()
n = base64url_encode(numbers.n.to_bytes((numbers.n.bit_length() + 7) // 8, byteorder="big")).decode("utf-8")
e = base64url_encode(numbers.e.to_bytes((numbers.e.bit_length() + 7) // 8, byteorder="big")).decode("utf-8")

# 构建JWK
jwk = {
    "kty": "RSA",
    "alg": "RS256",
    "use": "sig",
    "n": n,
    "e": e,
    "kid": "your-key-id"  # 自定义密钥ID,用于标识你的公钥
}

2. 创建DRF视图

在你的Django项目中新建一个视图,返回JWK集(JWKS)格式的响应:

from rest_framework.views import APIView
from rest_framework.response import Response

class JWKSView(APIView):
    # 不需要认证,允许Epic直接访问
    authentication_classes = []
    permission_classes = []

    def get(self, request):
        # 这里替换成你生成的JWK
        jwk = {
            "kty": "RSA",
            "alg": "RS256",
            "use": "sig",
            "n": "你的公钥n值",
            "e": "你的公钥e值",
            "kid": "your-key-id"
        }
        return Response({"keys": [jwk]})

3. 配置URL路由

在项目的urls.py中添加路由:

from django.urls import path
from .views import JWKSView

urlpatterns = [
    # 其他路由...
    path(".well-known/jwks.json", JWKSView.as_view(), name="jwks"),
]

4. 验证与配置

  • 启动Django服务后,访问http://your-domain/.well-known/jwks.json,确认返回的JSON格式正确。
  • 将这个URL填写到Epic应用配置页面的JWK URL字段中。

注意事项

  • 确保该端点公开可访问,不要添加认证或IP限制,否则Epic无法获取你的公钥。
  • JWK中的kid要保持唯一,如果你有多组密钥,可在JWKS中添加多个JWK对象。
  • 公钥必须和你上传给Epic的完全一致,否则签名验证会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:02:28