Sto scrivendo una webapp in Angular dove l'autenticazione è gestita da un token JWT, il che significa che ogni richiesta ha un'intestazione "Authentication" con tutte le informazioni necessarie.
Funziona bene per le chiamate REST, ma non capisco come dovrei gestire i link di download per i file ospitati sul back-end (i file risiedono sullo stesso server in cui sono ospitati i servizi web).
Non posso utilizzare <a href='...'/>
collegamenti regolari poiché non portano alcuna intestazione e l'autenticazione fallirà. Lo stesso vale per i vari incantesimi di window.open(...)
.
Alcune soluzioni a cui ho pensato:
- Genera un collegamento per il download temporaneo non protetto sul server
- Passa le informazioni di autenticazione come parametro URL e gestisci manualmente il caso
- Ottieni i dati tramite XHR e salva il file lato client.
Tutto quanto sopra è meno che soddisfacente.
1 è la soluzione che sto usando in questo momento. Non mi piace per due motivi: primo non è l'ideale dal punto di vista della sicurezza, secondo funziona ma richiede parecchio lavoro soprattutto sul server: per scaricare qualcosa devo chiamare un servizio che genera un nuovo "random "url, lo memorizza da qualche parte (possibilmente sul DB) per un po 'di tempo e lo restituisce al client. Il client ottiene l'URL e usa window.open o simile con esso. Quando richiesto, il nuovo URL dovrebbe verificare se è ancora valido e quindi restituire i dati.
2 sembra almeno altrettanto lavoro.
3 sembra un sacco di lavoro, anche usando le librerie disponibili, e molti potenziali problemi. (Avrei bisogno di fornire la mia barra di stato del download, caricare l'intero file in memoria e quindi chiedere all'utente di salvare il file localmente).
Il compito sembra piuttosto semplice, quindi mi chiedo se c'è qualcosa di molto più semplice che posso usare.
Non sto necessariamente cercando una soluzione "alla maniera angolare". Javascript normale andrebbe bene.