सफारी फ़्लैट आउट आपको डोमेन के iframes में कुकीज़ को मूल डोमेन से अलग सेट करने की अनुमति नहीं देता, सर्वर-साइड CORS हेडर को धिक्कार है।
स्पष्ट करने के लिए: user domainA.com पर है। DomainB.com के लिए एक iframe खुला है, और iframe के अंदर domainB.com पर उपयोगकर्ता को प्रमाणित करने का प्रयास करता है। सेट-कुकी हेडर को सभी आवश्यक हेडर के साथ domainB.com iframe के अंदर सर्वर से लौटाया जाता है, लेकिन सफारी इसे बाद की कॉल में वापस नहीं भेज रहा है।
एक पुराना वर्कअराउंड iframe से एक फॉर्म सबमिट कर रहा था, और प्रतिक्रिया में कुकी सेट करें। मुझे लगता है कि वे इस तथ्य को पसंद करते थे कि उपयोगकर्ता फॉर्म जमा करने के लिए कुछ क्लिक कर रहा था। जब आप वापस आए तो कुकी को देखने के लिए आपको मतदान करना होगा, क्योंकि फॉर्म सबमिट में कोई कॉलबैक नहीं है, और HttpOnly कुकीज़ के मामले में आप नहीं कर सकते, लेकिन हे, यह काम किया! जब तक यह नहीं किया।
फिर, हाल ही में एक और वर्कअराउंड उपयोगकर्ता को एक नई विंडो / टैब में iframe डोमेन के लिए पुनर्निर्देशित कर रहा था, वहां एक यादृच्छिक कुकी सेट कर रहा था, और उस पल से, उस उपडोमेन iframe के अंदर "विश्वसनीय" था। फिर से, नई विंडो / टैब खोलने के लिए एक क्लिक की आवश्यकता थी, और नए टैब के खुलने का एक दृश्य संकेत भी था। ज्यादा सुरक्षा, ऐसे मानक।
और अब, सफारी 13 के रूप में - कोई और अधिक समाधान नहीं। कोई और अधिक सुरक्षित iframe कुकी सेटिंग ame नहीं
कोई भी अन्य प्रमाणीकरण योजना हमारे लिए अच्छी नहीं है (उदाहरण के लिए प्रामाणिक- X हेडर)। हमें एक HttpOnly सुरक्षित कुकी का उपयोग करने की आवश्यकता है, क्योंकि हम नहीं चाहते कि किसी भी तरह से जावास्क्रिप्ट क्लाइंट-साइड द्वारा सुलभ हो।
स्पष्ट होने के लिए, सब कुछ किसी भी अन्य ब्राउज़र पर बहुत अच्छा काम करता है।
क्या किसी के पास कोई सुझाव है?
संपादित करें:
लिंक @tomschmidt के लिए धन्यवाद, यह सही दिशा की तरह लगता है। मैंने Apple के स्टोरेज एक्सेस एपीआई का उपयोग करने की कोशिश की, लेकिन दुर्भाग्य से, हालांकि मैं एपीआई के साथ अपने लॉगिन लॉजिक को शुरू करने से पहले एक्सेस का अनुरोध करना सुनिश्चित कर रहा हूं:
requestStorageAccess = async() => {
return new Promise(resolve => {
//@ts-ignore
document.requestStorageAccess().then(
function () {
console.log('Storage access was granted');
resolve(true);
},
function () {
console.log('Storage access was denied');
resolve(false);
}
);
});
}
const storageAccessGranted = await requestStorageAccess();
console.log(storageAccessGranted) // prints 'true'
await login();
फिर भी, / लॉगिन एपीआई प्रतिक्रिया पर प्राप्त कुकीज़ एपीआई के बाद कॉल में नहीं भेजा जा रहा है :(