【问题标题】:Post to Azure FHIR Server method Fail to Authentication Failed 401发布到 Azure FHIR 服务器方法 Fail to Authentication Failed 401
【发布时间】:2020-02-14 00:06:00
【问题描述】:

我有一个 Azure FHIR 服务器,我已经使用 POSTMAN 进行了测试,我能够使用 POSTMAN 和 Oauth 令牌读取患者以及 POST 患者。

我现在创建了一个 JavaScript Post 方法,以便我可以从我自己的方法而不是使用 POSTMAN 发布数据。 我已经遵循了这里的基本指导Creating a resource 我可以使用 POSTMAN 获取访问令牌,并在我的 POST 方法中使用该访问令牌。

我的方法和发布数据如下。

<!DOCTYPE html>
<html>
<head>
  <script type="text/javascript">

  (async () => {
  const rawResponse = await fetch('https://smarthealth.azurehealthcareapis.com/Patient', {
  method: 'POST',
  Authorization: 'Bearer DGRijc8LrnjCrhRFRSn2Jnf89q2wGT_gxNHtJt',
   headers: {
              'Access-Control-Allow-Origin': '*',
               'Accept': 'application/json',
               'Content-Type': 'application/json',
               'Access-Control-Allow-Origin': 'http://localhost:3000',
               'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS'
                },
    body: JSON.stringify({
    "resourceType": "Patient",
    "id": "9184e31a-a2b3-4b8d-9032-d5377cabaa08",

       "extension": [
         {
          "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
            "extension": [
               {
                "url": "ombCategory",
              "valueCoding": {
               "system": "urn:oid:2.16.840.1.113883.6.238",
             "code": "2106-3",
             "display": "White"
                }
                  },
           {
             "url": "text",
           "valueString": "White"
                         }
                            ]
                        },
                        {
              "url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
        "valueAddress": {
         "city": "Mashpee",
          "state": "Massachusetts",
          "country": "US"
                            }
                        },

                    ],

                    "name": [
                        {
                            "use": "official",
                            "family": "Kutch",
                            "given": [
                                "Sherron"
                            ]
                        }
                    ],

                    "gender": "female",
                    "birthDate": "2009-04-29",

                })
            });
            const content = await rawResponse.json();

            console.log(content);
        })();

    </script>
</head>

<body>
    Javascript Azure FHIR Post Request Test
</body>

</html>

【问题讨论】:

  • 我认为你没有以正确的方式发送令牌,Authorization: 'Bearer DGRijc8LrnjCrhRFRSn2Jnf89q2wGT_gxNHtJt'我怀疑这条线。
  • 是的,你到底是从哪里得到这个令牌的?
  • @MichaelHansen 我正在使用 POSTMAN 检索令牌,然后在我的方法中使用它。它在 POSTMAN 中运行良好。
  • 这看起来不像是一个有效的令牌。返回标头说什么(您可以在 Fiddler 或类似的东西中检查)。
  • 与之前的评论者一样,您似乎没有以正确的方式添加该标题。为什么不与其他标题一起使用。我会检查 Fiddler 以确保您确实以正确的方式发送令牌(并确保它确实是有效的令牌)。

标签: javascript azure http post hl7-fhir


【解决方案1】:

您可以尝试按照以下格式发送您的请求。

  $("#btnPostToAzureFHIR").click(function () {
        var yourPostDataFormat = {
            resourceType: "Patient",
            id: "9184e31a-a2b3-4b8d-9032-d5377cabaa08"
        }
        $.ajax({
            type: "POST",
            url: "https://smarthealth.azurehealthcareapis.com/Patient",
            data: JSON.stringify(yourPostDataFormat),
            beforeSend: function (xhr) {
                xhr.setRequestHeader('Authorization','Bearer DGRijc8LrnjCrhRFRSn2Jnf89q2wGT_gxNHtJt');
            },
            dataType: "json",
            contentType: "application/json",
            success: function (data) {
                console.log(data);

            }
        });

注意:yourPostDataFormat 的键值对中绑定您的参数,然后传递JSON.stringify(yourPostDataFormat) 部分。希望它会用令牌发布您的请求

【讨论】:

  • 您的点击按钮功能对我不起作用,因为它会抛出我必须做的错误,您是否知道我将如何发布 JSON 文件而不是 JSON 数据本身? var yourPostDataFormat = { "resourceType": "Patient", "id": "9184e31a-a2b3-4b8d-9032-d5377cabaa08", "meta": { "versionId": "3", "lastUpdated": "2019-06- 06T02:51:49.378-04:00"}
  • 我不关心关注beforeSend: function (xhr) { xhr.setRequestHeader('Authorization','Bearer DGRijc8LrnjCrhRFRSn2Jnf89q2wGT_gxNHtJt'); } 的点击按钮,这是在服务器上传递令牌的有效方式。由于您的令牌无法访问服务器,因此您正在获得未经授权。
  • 因为我将我的数据设置为它工作的变量,我现在可以发布到服务器。但不是粘贴 JSON 数据,我想发布 JSON 文件。
  • 我明白了。很高兴为您提供帮助。
猜你喜欢
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
相关资源
最近更新 更多