使用Fetch API重定向响应获取位置片段

Kev*_*zet 8 redirect oauth-2.0 webrtc openid-connect fetch-api

我正在尝试获取fetch API请求的重定向响应位置片段.但如果可能的话,我无法想象如何访问它.

上下文是我在隐式流中执行OpenID Connect请求,用于WebRTC Identity Proxy断言生成.OIDC规范将请求的答案定义为:

使用Implicit Flow时,所有响应参数都将添加到重定向URI的片段组件中

HTTP/1.1 302找到位置:https ://client.example.org/cb# access_token = SlAV32hkKG ...

所以我在手动模式下设置了获取请求.但响应是一个不透明的重定向过滤响应,它隐藏了位置标题.(https://fetch.spec.whatwg.org/#concept-filtered-response-opaque-redirect)

其他获取模式是错误,其后无效.虽然XHR会自动跟随重定向,但也无济于事.我可能会从fetch API中遗漏一些东西,但它似乎是故意隐藏的东西.

有人能给我一种方法来访问这些信息(或确认这是不可能的)?

是否有替代fetch和XHR来发出此请求,这将允许访问重定向位置标头?

Dan*_* B. 3

由于 XHR 自动/不透明地遵循重定向(例如,如果您使用 polyfill whatwg-fetch,一种可能的解决方案是检查response.url分辨率fetch,看看它是否与您期望的重定向位置匹配。

仅当可能的重定向位置有限或匹配某些模式时,这才会有帮助——例如,如果您可能希望随时重定向到/login

function fetchMiddleware(response) {
  const a = document.createElement('a');
  a.href = response.url;
  if (a.pathname === '/login') {
    // ...
  } else {
    return response;
  }
}

fetch(`/api`)
  .then(fetchMiddleware)
  .then(function (response) {
    // ...
  });
Run Code Online (Sandbox Code Playgroud)