使用B2C身份提供者向Azure FHIR服务写入数据的可行性
如何让Azure B2C用户向Azure FHIR服务写入数据?
当然可以实现,现有示例仅展示读取功能是因为基础演示需求,只需调整几处配置就能开启写入权限,具体步骤如下:
1. 扩展FHIR服务的允许范围
进入Azure FHIR服务的身份验证配置页面:
- 在「允许的范围」中添加写入相关的权限范围,比如:
patient/*.write:允许对患者相关资源执行写入操作user/*.write:允许对用户关联的资源执行写入操作- 也可添加具体资源的写入权限,如
patient/Patient.write、user/Observation.write
- 确保「允许的对象ID」包含你的Azure B2C租户中应用注册的对象ID,或B2C用户组的对象ID(如果按组授权)
2. 配置B2C应用注册的API权限
在Azure AD B2C的应用注册中:
- 找到FHIR服务对应的API(若未添加,可手动输入FHIR服务的资源ID,即其URL)
- 添加所需的写入权限(对应第一步中配置的范围),并完成权限授予(管理员需预先同意用户级权限,应用级权限也需管理员同意)
3. 配置FHIR服务的访问控制(RBAC)
如果你的FHIR服务启用了Azure RBAC:
- 前往FHIR服务的**访问控制(IAM)**页面,为B2C用户或用户组分配合适的角色:
- 「FHIR数据写入者」:允许写入所有FHIR资源
- 「FHIR数据参与者」:允许读写所有FHIR资源
- 若需更细粒度控制,可自定义RBAC角色,限定特定资源的写入权限
若使用FHIR原生权限模型而非Azure RBAC,则需在FHIR服务中配置权限规则,明确允许B2C用户身份执行写入操作,比如基于用户与患者资源的关联关系设置规则。
4. 在应用中请求正确的令牌范围
当应用从B2C获取身份令牌时,务必请求包含写入权限的范围,例如:
https://<你的FHIR服务域名>.azurehealthcareapis.com/patient/*.write
确保返回的JWT令牌中scp字段包含对应的写入权限,这样FHIR服务才会认可写入请求。
5. 验证配置
使用B2C用户登录应用后,获取令牌并调用FHIR的写入接口(如POST /Patient创建患者资源),检查请求是否成功。若遇到权限错误,可从以下几点排查:
- 令牌中的
scp字段是否包含目标写入范围 - FHIR服务的「允许的范围」是否已添加对应权限
- RBAC角色或FHIR原生权限规则是否正确配置
内容的提问来源于stack exchange,提问作者Alexandre Guimond
相关产品推荐
相关产品推荐

