मैं एक ऐसी वेबसाइट पर काम कर रहा हूं, जो ट्विटर, गूगल आदि की पसंद से उपयोगकर्ताओं को OAuth क्रेडेंशियल्स का उपयोग करने के लिए लॉग इन करने की अनुमति देगा। ऐसा करने के लिए, मुझे इन विभिन्न प्रदाताओं के साथ पंजीकरण करना होगा और एक सुपर-सीक्रेट एपीआई कुंजी प्राप्त करना होगा जो मेरे पास है विभिन्न शरीर के अंगों के खिलाफ प्रतिज्ञाओं के साथ रक्षा करना। अगर मेरी चाबी गटक जाती है, तो भाग याँक हो जाता है।
एपीआई कुंजी को मेरे स्रोत के साथ यात्रा करना है, क्योंकि यह प्रमाणीकरण अनुरोधों को करने के लिए रनटाइम पर उपयोग किया जाता है। मेरे मामले में, एप्लिकेशन को कॉन्फ़िगरेशन फ़ाइल में या कोड के भीतर ही मौजूद होना चाहिए। जब मैं एक मशीन से निर्माण और प्रकाशित करता हूं तो यह कोई समस्या नहीं है। हालांकि, जब हम स्रोत नियंत्रण को मिश्रण में फेंकते हैं, तो चीजें अधिक जटिल हो जाती हैं।
जैसा कि मैं एक सस्ता कमीने हूं, मैं क्लाउड या गीथहब में मुफ्त स्रोत नियंत्रण सेवाओं जैसे टीएफएस का उपयोग करना पसंद करूंगा। यह मुझे एक मामूली पहेली के साथ छोड़ देता है:
जब मेरी एपीआई कुंजी मेरे कोड में होती है, और मेरा कोड सार्वजनिक रिपॉजिटरी में उपलब्ध होता है, तो मैं अपने शरीर को कैसे अक्षुण्ण रख सकता हूं?
मैं इसे संभालने के कई तरीकों के बारे में सोच सकता हूं, लेकिन उनमें से कोई भी ऐसा नहीं है जो संतोषजनक हो।
- मैं कोड से सभी निजी जानकारी निकाल सकता हूं, और तैनाती के बाद इसे वापस संपादित कर सकता हूं। इसे लागू करने के लिए एक गंभीर दर्द होगा (मैं कई तरीकों का विस्तार नहीं करूँगा), और एक विकल्प नहीं है।
- मैं इसे एन्क्रिप्ट कर सकता था। लेकिन जैसा कि मुझे इसे डिक्रिप्ट करना है, स्रोत के साथ कोई भी यह पता लगा सकता है कि ऐसा कैसे करना है। व्यर्थ।
- मैं निजी स्रोत नियंत्रण के लिए भुगतान कर सकता था। LOL j / k पैसा खर्च करते हैं? कृप्या।
- मैं अपने शेष स्रोत से संवेदनशील जानकारी को अलग करने के लिए भाषा सुविधाओं का उपयोग कर सकता हूं और इसलिए इसे स्रोत नियंत्रण से रख सकता हूं। यह वही है जो मैं अभी कर रहा हूं, लेकिन गुप्त फ़ाइल में गलती से जाँच करने से यह आसानी से खराब हो सकता है।
मैं वास्तव में यह सुनिश्चित करने के लिए एक गारंटीकृत तरीके की तलाश कर रहा हूं कि मैं दुनिया के साथ अपने निजीकरण को साझा न करूं (स्नैपचैट को छोड़कर) जो विकास, डिबगिंग और तैनाती के माध्यम से सुचारू रूप से काम करेगा और मूर्ख भी होगा। यह पूरी तरह से अवास्तविक है। तो मैं वास्तव में क्या कर सकता हूं?
तकनीकी विवरण: VS2012, C # 4.5, स्रोत नियंत्रण या तो TF सेवा या GitHub होने जा रहा है। वर्तमान में संवेदनशील कुंजियों को अलग .cs फ़ाइल में विभाजित करने के लिए एक आंशिक वर्ग का उपयोग करके जिसे स्रोत नियंत्रण में नहीं जोड़ा जाएगा। मुझे लगता है कि GitHub का फायदा हो सकता है क्योंकि .ignignore का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि आंशिक वर्ग फ़ाइल को चेक नहीं किया गया है, लेकिन मैंने इसे पहले खराब कर दिया है। "ओह, कॉमन इश्यू, यह है कि आप इसे कैसे करते हैं" की उम्मीद कर रहा हूं, लेकिन मुझे "जितना चूसना हो सकता है उतना मत करो",: /