Estamos tratando de construir una página web que muestre un botón para descargar un archivo XML. El archivo se recupera realizando una solicitud a un extremo REST que requiere un token de portador en el encabezado de autenticación.
Hicimos un botón con función onclick como este:
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'));Referencia para el código anterior
Esto parece funcionar muy bien en la mayoría de los navegadores, sin embargo, en Edge esta descarga está bloqueada por Microsoft Defender SmartScreen, porque no está vinculada a un gesto del usuario.
¿Cómo podemos iniciar una solicitud de descarga de archivos vinculada a un gesto de usuario con un encabezado de autenticación?
Sabemos que podríamos cambiar el mecanismo de autenticación para que acepte el token de autenticación de una cookie o el cuerpo de la solicitud, pero no queremos hacer esto.