FHIR - 使用 C# 保存 DocumentReference 时出现 403 范围不足错误

问题描述 投票:0回答:1

最初发布在 Oracle/Cerner 论坛,但已经一周了没有答案,我被困住了,希望这里有人能看到这个问题。它并不是 Cerner 特有的,因为 FHIR 是一个更大的医疗保健标准。

我有一个使用 C# 的系统应用程序,使用需要身份验证的 Cerner 服务器,它非常适合读取和获取数据。现在,我正在尝试向患者添加文档。我确信我做错了一些简单的事情,感谢您的帮助。

这是请求 uri:

AbsoluteUri:“https://fhir-ehr-code.cerner.com/r4/ec2458f2-1e24-41c8-b71b-0e701af7583d/DocumentReference”

在尝试保存文件之前,我获得了一个新的访问令牌。这些是我要求的范围:

request.AddParameter("scope", "system/Patient.read system/Patient.write system/DiagnosticReport.read system/DiagnosticReport.write system/Binary.read system/Binary.write system/Condition.read system/Encounter.read system/Encounter.write system/Location.read system/DocumentReference.read system/DocumentReference.write");

我从此处Cerner 的 R4 示例复制了下面的 JSON,并替换了一些内容,例如使用有效的患者 ID 和遭遇 ID:

这是我的相关代码。

using HttpClient client = _httpClientFactory.CreateClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); client.DefaultRequestHeaders.Add("Accept", "application/fhir+json"); client.DefaultRequestHeaders.Add("Prefer", "respond-async"); Uri uri = new Uri($"{_fhirSettings.FHIRServer}{_fhirSettings.ServerId}/DocumentReference"); string jsonPayload = @"{ ""resourceType"": ""DocumentReference"", ""status"": ""current"", ""docStatus"": ""final"", ""type"": { ""coding"": [ { ""system"": ""https://fhir.cerner.com/ec2458f2-1e24-41c8-b71b-0e701af7583d/codeSet/72"", ""code"": ""2820507"", ""display"": ""Admission Note Physician"", ""userSelected"": true } ], ""text"": ""Summary document"" }, ""subject"": { ""reference"": ""Patient/12742418"" }, ""content"": [ { ""attachment"": { ""contentType"": ""application/xml;charset=utf-8"", ""data"": ""PGh0bWw+Cjx0aXRsZT4gVGVzdCBEb2N1bWVudCA8L3RpdGxlPgoKRG9jdW1lbnQgY29udGVudCEKCjwvaHRtbD4="", ""title"": ""Height Weight Allergy Rule"", ""creation"": ""2024-01-29T21:02:04.000Z"" } } ], ""context"": { ""encounter"": [ { ""reference"": ""Encounter/98001628"" } ], ""period"": { ""start"": ""2023-10-20T13:45:00.000Z"", ""end"": ""2023-10-21T13:45:00.000Z"" } } }"; var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); HttpResponseMessage response = client.PostAsync(uri, content).Result;
如有任何帮助,我们将不胜感激。

c# hl7-fhir
1个回答
0
投票
您的访问令牌可能具有的范围由您的应用程序注册中允许的范围决定。由于您正在请求一组特定的范围,但没有从令牌调用中获取所有范围,这表明您的应用程序注册需要更新以包含所有所需的范围。

您应该登录到

Cerner 代码控制台 并转到我的应用程序。打开适用的应用程序,然后在“API 访问”部分中,验证您是否已选中所有所需的范围(或者如果有需要启用的范围,则选中复选框)。不确定向沙箱推出的更改是否会延迟,因此如果更改没有快速生效,您可能需要等待几个小时。

© www.soinside.com 2019 - 2024. All rights reserved.