在 AJAX 调用中保护 JWT 令牌

Securing JWT tokens in a AJAX call

假设站点 A 有一段 javascript 对站点 B 上的端点执行 ajax 调用。站点 A 使用从站点 B 生成的 JWT 来验证请求。

用户是否仅通过检查(例如 Chrome)请求就可以获得 JWT,它是 headers?然后他可以使用那个 JWT 并提出自己的请求。

如果是这样,在浏览器中进行 ajax 调用时应该如何使用 JWT,而不是在 javascript 文件中以纯文本形式显示?

例如

$.ajax({
  type:"GET",
  beforeSend: function (request)
  {
    request.setRequestHeader("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2p3dC1pZHAuZXhhbXBsZS5jb20iLCJzdWIiOiJtYWlsdG86bWlrZUBleGFtcGxlLmNvbSIsIm5iZiI6MTQzNDk0NDIwMywiZXhwIjoxNDM0OTQ3ODAzLCJpYXQiOjE0MzQ5NDQyMDMsImp0aSI6ImlkMTIzNDU2IiwidHlwIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9yZWdpc3RlciJ9.UPFXFOgvmXUenz4mtJkzSEiBc_k6hdytTbxIrDDET2o");
  },
  url: "https://siteb.com/api/articles/",
  success: function(data) {
    // do something with data
  }
});

是的,用户可以在他的浏览器上访问 JWT 令牌 - 这与 cookie 没有什么不同。

对于用户B授权你的应用A代表他访问B的场景,不需要保护来自用户本人的 JWT 令牌 - 仅来自第 3 方。

如果您想象一个场景,其中服务 B 以某种方式授权您的应用程序 A 访问它,那么 JWT 令牌永远不应该进入浏览器,而是留在 A 的服务器端。那么您的 AJAX 调用应该转到使用适当的 JWT 与 B 通信的 A。