使用提取API调用带有身份验证令牌的URL

时间:2019-04-14 10:13:52

标签: javascript jwt basic-authentication fetch-api

我正在使用Fetch API通过Baisc身份验证登录到我的Web应用程序。成功登录后,服务器将令牌作为json对象返回。然后,我使用此令牌向其他API端点发出请求。如果请求包含有效令牌,则这些端点仅显示网页。

一切正常,但是在我成功使用fetch API调用后,浏览器中没有任何显示。

如果我在REST客户端中调用API端点,它将返回html,这似乎很好。问题似乎是浏览器应该调用url而不是仅获取html。

这是我的代码。我收到了“成功”警报-一切似乎都正常。但是我需要浏览器将结果显示为新页面(某种形式的直接调用,在标头中带有令牌的url)。

function login(event) {
  event.preventDefault();
  let username = document.getElementById("username").value;
  let password = document.getElementById("password").value;
  let url = URL + 'login';
  let headers = new Headers();
  headers.append('Authorization', 'Basic ' + btoa(username + ":" + password));
  fetch(url, {method:'GET',
          headers: headers,
         })
  .then(function(response)
  {
    if (response.ok) {
      return response.json();
    } else {
      let error = document.getElementById("login-error");
      error.innerHTML = "Username/Password incorrect.";
    }
  })
  .then(function(json)
  {
    if (typeof(json) !== "undefined") {
      startWebapp(json.token);
    }
  })
  .catch(error => console.error('Error:', error));
}

function startWebapp(token) {
  let url = URL + 'webapp/overview';
  let headers = new Headers();
  headers.append('Authorization', 'Bearer ' + token);
  fetch(url, {method:'GET',
headers: headers,
})
.then(function(response) {
  alert("Success!");
  return response;
});
}

如何获取浏览器实际使用API​​令牌调用网址并在获取成功后打开网址?

1 个答案:

答案 0 :(得分:0)

对于任何寻求解决方案的人: 使用JavaScript或获取API实际上是不可能的。对我来说,(最简单的)解决方案是将令牌保存在cookie中。然后,服务器在cookie中搜索令牌,并将其用于身份验证/授权。效果很好,我不需要在每次请求时都发送令牌。

希望有帮助。