Javascript 如何在标头中正确提供身份验证令牌,以便graphql不会重定向到登录页面?

Javascript 如何在标头中正确提供身份验证令牌,以便graphql不会重定向到登录页面?,javascript,authentication,graphql,k6,Javascript,Authentication,Graphql,K6,在我的QA组织中,我被要求构建一个JavaScript测试文件,以使用k6(loadimpact)调用我们的graphQL端点。我正在成功生成我们的身份验证令牌,并将其添加到我正在进行的呼叫的标题中。但由于某种原因,我被重定向到我们公司的登录页面。在没有重定向的情况下进行此呼叫的正确方式是什么 我正在创建我的标题: let headers = { 'Authorization': `Bearer ${authToken}`, "ac

在我的QA组织中,我被要求构建一个JavaScript测试文件,以使用k6(loadimpact)调用我们的graphQL端点。我正在成功生成我们的身份验证令牌,并将其添加到我正在进行的呼叫的标题中。但由于某种原因,我被重定向到我们公司的登录页面。在没有重定向的情况下进行此呼叫的正确方式是什么

我正在创建我的标题:

let headers = {
                'Authorization': `Bearer ${authToken}`,
                "accept": "*/*",
                "Origin": "https://myurl.com",
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36",
                "DNT": "1",
                "content-type": "application/json" };
我对graphQL的调用:

let myResponse = http.post("https://myurl.com/load/graphql", 
   "{..variables...query..}",
      {headers: headers});
即使生成的身份验证代码有效,我也会收到如下返回结果:

{
  "remote_ip": "myIP",
  "remote_port": 443,
  "url": "https://companyURL/login/",
  "status": 200,
  "proto": "HTTP/1.1",
  "headers": {
    "Cache-Control": "public, max-age=0",
    "Last-Modified": "Wed, 18 Sep 2019 17:47:24 GMT",
    "Etag": "W/\"527-16d457c67e0\"",
    "Server": "Microsoft-IIS/10.0",
    "Content-Length": "1319",
    "Content-Type": "text/html; charset=UTF-8",
    "Accept-Ranges": "bytes",
    "Vary": "Origin",
    "X-Powered-By": "Express, ASP.NET",
    "Date": "Tue, 14 Jan 2020 15:13:05 GMT",
    "Access-Control-Allow-Credentials": "true"
  },
  "cookies": {},
  "body": "**...My company page login HTML...**",
  "timings": {
    "duration": 26.9992,
    "blocked": 0,
    "looking_up": 0,
    "connecting": 0,
    "tls_handshaking": 0,
    "sending": 0,
    "waiting": 26.9992,
    "receiving": 0
  },
  "tls_version": "tls1.2",
  "tls_cipher_suite": "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
  "ocsp": {
    "produced_at": 0,
    "this_update": 0,
    "next_update": 0,
    "revoked_at": 0,
    "revocation_reason": "",
    "status": "unknown"
  },
  "error": "",
  "error_code": 0,
  "request": {
"method": "POST",
"url": "https://myurl/load/graphql",
"headers": {
  "Origin": [
    "https://myurl"
  ],
  "Dnt": [
    "1"
  ],
  "Content-Type": [
    "application/json"
  ],
  "User-Agent": [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
  ],
  "Authorization": [
    "Bearer myreallylongauthcode"
  ],
  "Accept": [
    "*/*"
  ]
},
"body": "...env variables..query..",
"cookies": {}
} }


我已经回顾了与graphQL相关的其他问题,但似乎没有什么是非常合适的。在loadimpact网站上查看K6文档时,会显示将身份验证代码添加到标题中,但这显然不起作用。

与其将
标题作为第三个参数传递给
http.post()
,不如这样传递它:
http.post(
)https://myurl.com/load/graphql“,{..变量…查询..}“,{headers:headers})


这里还有更多示例:

您应该像这样传递
http.post()
,而不是将
头作为第三个参数传递给
http.post()
https://myurl.com/load/graphql“,{..variables…query..}”,{headers:headers});


更多示例:

响应现在正确地包含了头(谢谢),但结果仍然是一样的。我不确定还有什么原因。我建议尝试在HTTP“镜像”上运行此请求“比如,确保你的要求正是你所期望的。另外,尝试更新到最新的k6版本,v0.26.0-IIRC您正在使用的v0.25.0版本中没有任何可能导致此问题的错误,但是尝试更新到最新版本并没有什么坏处。响应现在正确地包含了标题(谢谢),但结果仍然是一样的。嗯,我不确定还有什么原因。我建议尝试对HTTP“镜像”运行此请求,以确保您的请求正是您所期望的。此外,请尝试更新到最新的k6版本v0.26.0-IIRC。您正在使用的v0.25.0版本中没有任何可能导致此问题的错误,但尝试更新到最新版本并不有害。