我们正在尝试构建一个显示下载 XML 文件的按钮的网页。该文件是通过向 REST 端点发出请求来检索的,该端点需要 auth 标头中的承载令牌。
我们制作了一个带有 onclick 功能的按钮,如下所示:
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <bearer token here>")
var requestOptions = {
method: 'GET',
headers: myHeaders,
};
fetch('<url>', requestOptions)
.then(resp => resp.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
// the filename
a.download = 'todo-1.json';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
alert('your file has downloaded!');
})
.catch(() => alert('Error'));
这似乎在大多数浏览器中运行良好,但是,在 Edge 上,此下载被 Microsoft Defender SmartScreen 阻止,因为它与用户手势无关。
我们如何启动与带有 auth 标头的用户手势相关的文件下载请求?
我们知道我们可以更改身份验证机制,以便它接受来自 cookie 或请求正文的身份验证令牌,但我们不想这样做。