【问题标题】:How to get a response from an API that sits behind an authentication layer?如何从位于身份验证层后面的 API 获得响应?
【发布时间】:2019-03-19 08:50:17
【问题描述】:

我正在尝试从位于身份验证层后面的 API 获取响应。我首先需要使用类似这样的 json 请求 POST 请求。

{"username":"apitest",
 "password":"testapi@321"
}

假设 api url 是http://test-oms-test-staging.com.au/test/auth

我得到一个响应正文中包含以下内容的 json 响应:

"token": "abcdefghabcdefgh"

现在我需要将令牌作为标头 "x-auth-token": 传递到其中包含参数的 API 中,以获取需要在 html 页面中显示的响应。

到目前为止,我已经能够做到以下几点

function begin() {
var xhr = new XMLHttpRequest();
var url = "http://test-oms-test-staging.com.au/test/auth";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
    var json = JSON.parse(xhr.responseText);
    var string = json['token'];
    console.log(string);
}
                            }
var data = JSON.stringify({"username": "apitest", "password": 
"testapi@321"});
xhr.send(data);        
}  

现在,当我在标头中使用响应令牌查询第二个 API URL 时,我收到以下错误。

Response for preflight is invalid (redirect)

如果我的要求太宽泛或不够详细,我深表歉意,我对编程很陌生。我做了一些研究,发现由于服务器安全性,我的请求被重新定向。我是否在做正确的事情,将其视为两种单独的方法?再次感谢您。

编辑 发生这种情况是因为 API 正在触发需要验证的 OPTIONS 请求。我在想这是因为我作为两个单独的请求执行此操作(首先是 POST 请求以检索响应正文中的令牌,第二个“GET”以将令牌作为标头传递。在第二个请求中,触发了飞行前发送一个经过身份验证的 OPTION 请求这就是为什么我现在收到 401“未验证”错误。在为可能的重复提供的链接中,除了将服务器编辑为“未验证”之外,没有其他答案,这不是一个有效的解决方案。

【问题讨论】:

标签: javascript json xmlhttprequest


【解决方案1】:

您提到您需要将令牌作为标头发送,但在您的示例中,您将其作为有效负载的一部分发送。试试下面的:

xhr.setRequestHeader("x-auth-token", "<THE_AUTH_TOKEN>");

【讨论】:

  • 嘿,在第一个 xmlhttprequest 中,我需要将其作为有效负载发送,在我将收到响应的正文中(身份验证令牌)并将其作为标头发送回另一个 API URL .很抱歉,如果它令人困惑
猜你喜欢
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 2019-09-13
  • 1970-01-01
  • 2012-11-10
  • 2020-01-22
  • 2019-09-22
相关资源
最近更新 更多