मैं Angular में एक webapp लिख रहा हूँ जहाँ प्रमाणीकरण को JWT टोकन द्वारा नियंत्रित किया जाता है, जिसका अर्थ है कि प्रत्येक अनुरोध में सभी आवश्यक जानकारी के साथ "प्रमाणीकरण" शीर्षक है।
यह REST कॉल के लिए अच्छी तरह से काम करता है, लेकिन मुझे समझ में नहीं आता है कि मुझे बैकएंड पर होस्ट की गई फ़ाइलों के लिए डाउनलोड लिंक को कैसे संभालना चाहिए (फाइलें उसी सर्वर पर रहती हैं जहां वेबसर्विस होस्ट की जाती हैं)।
मैं नियमित <a href='...'/>
लिंक का उपयोग नहीं कर सकता क्योंकि वे कोई हेडर नहीं लेंगे और प्रमाणीकरण विफल हो जाएगा। के विभिन्न विसंगतियों के लिए भी window.open(...)
।
कुछ समाधान मैंने सोचा:
- सर्वर पर एक अस्थायी असुरक्षित डाउनलोड लिंक उत्पन्न करें
- प्रमाणीकरण सूचना को url पैरामीटर के रूप में पास करें और मामले को मैन्युअल रूप से हैंडल करें
- XHR के माध्यम से डेटा प्राप्त करें और फ़ाइल क्लाइंट पक्ष को सहेजें।
उपरोक्त सभी संतोषजनक से कम हैं।
1 समाधान मैं अभी उपयोग कर रहा हूँ। मुझे यह दो कारणों से पसंद नहीं है: पहला यह आदर्श सुरक्षा-वार नहीं है, दूसरा यह काम करता है, लेकिन इसके लिए विशेष रूप से सर्वर पर काफी काम करने की आवश्यकता होती है: कुछ डाउनलोड करने के लिए मुझे एक सेवा को कॉल करने की आवश्यकता होती है जो एक नया "यादृच्छिक" उत्पन्न करती है "url, इसे कहीं (संभवतः DB पर) कुछ समय के लिए संग्रहीत करता है, और इसे क्लाइंट को लौटाता है। क्लाइंट को url मिलता है, और उसके साथ window.open या समान का उपयोग करें। जब अनुरोध किया जाता है, तो नए url को जांचना चाहिए कि क्या यह अभी भी मान्य है, और फिर डेटा वापस लौटाएं।
2 कम से कम उतना काम लगता है।
3 बहुत काम लगता है, यहां तक कि उपलब्ध पुस्तकालयों का उपयोग करते हुए, और बहुत सारे संभावित मुद्दे। (मुझे अपनी स्वयं की डाउनलोड स्थिति पट्टी प्रदान करने की आवश्यकता होगी, पूरी फ़ाइल को मेमोरी में लोड करें और फिर उपयोगकर्ता से स्थानीय रूप से फ़ाइल को बचाने के लिए कहें)।
हालांकि यह एक बहुत ही महत्वपूर्ण कार्य है, इसलिए मैं सोच रहा हूं कि क्या कुछ सरल है जिसका मैं उपयोग कर सकता हूं।
मैं जरूरी नहीं कि एक समाधान "कोणीय रास्ता" की तलाश कर रहा हूं। नियमित जावास्क्रिप्ट ठीक रहेगा।