2016-04-05 3 views
5

मेरे पास मेरी कोणीय एप्लिकेशन घोषणा में निम्नलिखित कोड - फेसबुक के लिए एक API कुंजी (शेयर बटन को लागू करने की):कोणीय - इस API कुंजी को छिपाने के लिए कैसे नहीं देख सकते

.run(function($FB){ 
    $FB.init('9xxxxxxxxxxxx94'); 
}) 

तो मुझे पता है सामान्य इसका उत्तर - 'एपीआई कुंजी सर्वर तरफ रखा जाना चाहिए', हालांकि मुझे नहीं लगता कि मैं वास्तव में इसे कैसे कार्यान्वित करता हूं।

शेयर कॉल विधि फ्रंट एंड पर बनाई गई है, इसलिए यदि मेरा सर्वर एपीआई कुंजी रखता है और उसे भेजता है, तो निश्चित रूप से यह अभी भी सामने के अंत में दिखाई देता है, अन्यथा शेयर बटन कैसे काम करेगा?

तो मेरा सवाल है, मैं उस फेसबुक एपीआई कुंजी को कैसे छिपा सकता हूं?

धन्यवाद।

+0

मैं इस समय के लिए शोध कर रहा हूं। मुझे कुंजी को 'छिपाने' के लिए कोई निश्चित विधि नहीं दिखाई देती है, हालांकि, आपको सोचना होगा कि फेसबुक आपको क्यों न केवल अनुमति देगा, बल्कि आपको दिखाएगा कि इसका उपयोग अपने क्लाइंट साइड जावास्क्रिप्ट में कैसे किया जाए ... मैं वर्तमान में यह मान रहा हूं कि जब आप एफबी पर डेवलपर के रूप में साइन अप करें और एक ऐप बनाएं, आपको कुछ पहचानने वाली जानकारी डालना होगा? मुझे लगता है कि क्या होता है, यह है कि एफबी एक गुप्त कुंजी के साथ दावों का एक गुच्छा इंगित करता है, केवल एफबी को जानता है, फिर जब आप इसे वेब के माध्यम से वापस भेजते हैं, तो जानकारी निकाली जाती है और कुंजी की जांच करने के लिए उपयोग किया जाता है, यह सत्यापित नहीं करता है पहचान। – samazi

उत्तर

5

कुंजी

पहली बात यह है कि क्या होता है का निवेदन है कि ग्राहक एक कुंजी का अनुरोध करेंगे। यह केवल कुछ पेजों पर होगा जैसे साइन अप और पृष्ठों में लॉग इन करें। यहां विचार यह है कि हम यह सुनिश्चित करना चाहते हैं कि केवल एक ज्ञात ग्राहक के साथ ब्राउज़ करने वाले उपयोगकर्ता (इस मामले में आधिकारिक वेबसाइट या कोर क्लाइंट जिसे इसे कहा जाता है) को उपयोगकर्ता बनाने या प्रमाणीकृत करने जैसी कार्रवाइयां करने की अनुमति है।

तो जब ग्राहक ऐप लॉगिन पृष्ठ का अनुरोध करता है तो सर्वर अनुरोध में भेजी गई जानकारी के आधार पर एक अद्वितीय टोकन उत्पन्न करता है। उपयोग की जाने वाली जानकारी हमेशा सर्वर को जानता है, कुछ ग्राहक जानता है, और कुछ दोनों जानते हैं। तो उदाहरण के लिए सर्वर User agent + current time + secret key पर आधारित एक अद्वितीय कुंजी उत्पन्न कर सकता है। सर्वर इस जानकारी के आधार पर एक हैश उत्पन्न करता है और फिर क्लाइंट मशीन पर केवल हैश युक्त एक कुकी संग्रहीत करता है।

सेटिंग अनुमतियाँ

इस बिंदु हमारे प्रमुख वास्तव में एक महत्वपूर्ण अब और नहीं है पर। इसे एक एक्सेस टोकन में बदल दिया गया है। सर्वर को तब यह एक्सेस टोकन लेना चाहिए और बाद में पुनर्प्राप्ति के लिए इसे स्टोर करना चाहिए। आप कुंजी को डेटाबेस में डाल सकते हैं, लेकिन इस प्रकार के डेटा को अक्सर पुनर्प्राप्त करने की आवश्यकता है क्योंकि मैं डेटाबेस रीड/लिखने और प्रदर्शन को बढ़ावा देने के लिए रेडिस जैसे कुंजी-मूल्य स्टोर का उपयोग करने का सुझाव दूंगा।

जब आप टोकन स्टोर करते हैं तो आपको टोकन के साथ कौन से अनुमतियां संबद्ध होती हैं यह इंगित करने के लिए आपको डेटा का एक अलग टुकड़ा भी स्टोर करना चाहिए। इस मामले में हमारा टोकन केवल उपयोगकर्ताओं को पंजीकृत करने और प्रमाणीकृत करने के तरीके के रूप में कार्य कर रहा है, इसलिए हम इसे उस मान के बगल में संग्रहीत करते हैं जो इंगित करता है कि टोकन किस प्रकार से संबंधित है (ऐप का वेब UI) और इसमें कौन सी अनुमतियां हैं (उपयोगकर्ताओं को बनाने और प्रमाणित करने के लिए सीमित) । हम इसका इलाज करते हैं जैसे कि हम किसी भी अन्य एपीआई क्लाइंट की तरह हम आंकड़ों को कैप्चर कर सकते हैं और इसका उपयोग कैसे कर सकते हैं इसका नियंत्रण कर सकते हैं।

एक अनुरोध

को अधिकृत ग्राहक तो एक नया उपयोगकर्ता बनाने या सर्वर में लॉग करता है, तो ग्राहक के अनुरोध के साथ एक की पहचान कुकी को भेजा देखने के लिए जाँच करेगा करने के लिए पोस्ट अनुरोध करता है। यदि नहीं, तो हम अनुरोध को अस्वीकार कर देते हैं। यदि यह कुकी भेजता है, तो सर्वर को पहले एक बार फिर इस्तेमाल किए गए मानों का उपयोग करके हैश उत्पन्न करना चाहिए (ये मान पहले से ही ज्ञात हैं या अनुरोध के साथ भेजे गए हैं, इसलिए हम वास्तव में सर्वर को बहुत अधिक कर नहीं लगा रहे हैं) कुकी की तुलना में इसकी तुलना करें हमें भेजा गया है, और यदि मान मिलान अनुरोध को आगे बढ़ने की अनुमति देते हैं।

Sources - Securing API Keys

या

बस अपने सर्वर के लिए एक अनुरोध भेजने के लिए और उसे छिपा एपीआई कुंजी के साथ अपने अनुरोध को पूरा करने और सिर्फ अपने सामने के अंत करने के लिए अपने अनुरोध के परिणाम वापसी करते हैं।

संबंधित मुद्दे