पूरे वेब पर उपयोगकर्ता प्रमाणीकरण के लिए सत्र एक लोकप्रिय विकल्प है। सत्र एक ऐसी अवधि है जिसके दौरान उपयोगकर्ता सक्रिय रूप से किसी एप्लिकेशन के साथ जुड़ता है। सत्र का जीवनकाल तब शुरू होता है जब कोई उपयोगकर्ता लॉग इन करता है और जब वे लॉग आउट करते हैं तो समाप्त होता है।
HTTP एक स्टेटलेस प्रोटोकॉल है, इसलिए आपको अक्सर उपयोगकर्ता गतिविधि को मैन्युअल रूप से ट्रैक करने की आवश्यकता होगी।
आपके एप्लिकेशन के सर्वर साइड पर, आप एक अद्वितीय मान उत्पन्न कर सकते हैं, अधिमानतः एक क्रिप्टोग्राफ़िक रूप से सुरक्षित एक। फिर आप उसे एक कुकी में स्टोर कर सकते हैं जिसे क्लाइंट आपके ऐप को भविष्य के अनुरोधों पर भेज देगा, जिससे राज्य का एक रूप बन जाएगा।
Go. में सत्र
आप सत्र को लागू करने के लिए नेट/http पैकेज का उपयोग कर सकते हैं, और ऐसे कई उपलब्ध पैकेज हैं जो पहले से ही ऐसा करते हैं। सबसे लोकप्रिय गोरिल्ला सत्र पैकेज है। यह पैकेज कस्टम सत्र बैकएंड इन्फ्रास्ट्रक्चर के साथ-साथ कुकी और फ़ाइल भंडारण कार्यक्षमता प्रदान करता है।
गोरिल्ला सत्र पैकेज को स्थापित करने के लिए अपने गो कार्यक्षेत्र पर इस आदेश को चलाएँ।
जाओ github.com/gorilla/sessions प्राप्त करें
इस ट्यूटोरियल में, आप सत्रों के लिए कुकी स्टोर का उपयोग करेंगे। आप एक वेब सर्वर शुरू करने के लिए नेट/http पैकेज का उपयोग करेंगे जो उपयोगकर्ता की समस्या की जांच करेगा और सत्रों को रद्द करेगा।
यहां उन आयातों की सूची दी गई है जिनकी आपको इस ट्यूटोरियल का अनुसरण करने की आवश्यकता होगी।
आयात (
"github.com/gorilla/sessions"
"लकड़ी का लट्ठा"
"नेट/http"
)
लकड़ी का लट्ठा पैकेज उपयोगकर्ता के प्रमाणीकरण की स्थिति के आधार पर लॉगिंग-संबंधित संचालन के लिए है।
एक साधारण कुकी स्टोर कार्यान्वयन
आपको अपने लॉगिन और लॉगआउट हैंडलर कार्यों के लिए एक कुकी स्टोर की आवश्यकता होगी। अपने कुकी स्टोर के लिए, आपको प्रमाणीकरण के लिए एक गुप्त कुंजी की आवश्यकता होगी।
यहाँ कुकी स्टोर के कार्यान्वयन के लिए एक फ़ंक्शन है।
// कुकीस्टोर फ़ंक्शन उपयोगकर्ता की गुप्त कुंजी के साथ एक कुकी स्टोर बनाता है
समारोहकुकी स्टोर() *सत्र.कुकी स्टोर {
सीक्रेटकी := []बाइट("सुपर-सीक्रेट-सीक्रेटकी")
कुकीस्टोर: = सत्र। न्यूकुकीस्टोर (सीक्रेटकी)
// फ़ंक्शन कुकी स्टोर को लौटाता है ताकि अन्य फ़ंक्शन इसे एक्सेस कर सकें
वापसी कुकी स्टोर
}
में कुकी स्टोर फ़ंक्शन, घोषित गुप्त कुंजी चर गुप्त कुंजी एक उदाहरण गुप्त कुंजी है। उत्पादन में, उदाहरण के लिए क्रिप्टो पैकेज का उपयोग करके, आपकी गुप्त कुंजी क्रिप्टोग्राफ़िक रूप से सुरक्षित होनी चाहिए। आपको रहस्य भी से लोड करना चाहिए एक पर्यावरण चर फ़ाइल.
फ़ंक्शन का मान देता है *सत्र। कुकी स्टोर प्रकार जो गुप्त कुंजी के साथ सुरक्षित कुकी स्टोर का प्रतिनिधित्व करता है। आप का उपयोग करेंगे कुकी स्टोर अपने में समारोह लॉग इन करें तथा लॉग आउट उपयोगकर्ताओं को प्रमाणित करने और सत्र असाइन करने के लिए हैंडलर।
लॉगिन हैंडलर फ़ंक्शन
आप यह सत्यापित करना चाहेंगे कि आपके लॉगिन हैंडलर फ़ंक्शन में सत्र बनाने से पहले उपयोगकर्ता पहले से लॉग इन है या नहीं। आप का उपयोग कर सकते हैं प्राप्त कुकी से सत्र पुनर्प्राप्त करने और क्लाइंट के अनुरोध में सत्र जोड़ने के लिए कुकी स्टोर पर विधि।
प्राप्त विधि सत्र और एक त्रुटि देता है जिसे आप संभाल सकते हैं। यदि आपको उपयोगकर्ता को प्रमाणित करने की आवश्यकता है, तो आप में प्रमाणित या अधिकृत कर सकते हैं लॉग इन करें हैंडलर।
// लॉगिन हैंडलर कुकी स्टोर से सत्र को पुनः प्राप्त करता है
समारोहलॉग इन करें(लेखक http. प्रतिक्रिया लेखक, अनुरोध *http. प्रार्थना) {
सत्र, त्रुटि: = कुकीस्टोर ()। प्राप्त करें (अनुरोध, "अनुरोध से कुकी नाम")यदि गलती!= शून्य {
लकड़ी का लट्ठा। फैटॉलन (गलती)
}// ऑपरेशन के आधार पर अपना उपयोगकर्ता प्रमाणीकरण यहां सेट करें
सत्र। मान ["प्राधिकरण स्थिति"] = सच
त्रुटि = सत्र। सहेजें (अनुरोध, लेखक)
यदि गलती!= शून्य {
वापसी
}
}
कुकी स्टोर में Value प्रॉपर्टी सत्र से संबंधित डेटा रखती है:
बचाना विधि सत्र को कुकी स्टोर में सहेजती है। अपने हैंडलर में, आपको उच्च सुरक्षा के लिए अन्य प्रमाणीकरण उपायों की आवश्यकता होगी।
उपयोगकर्ता की लॉगिन स्थिति सत्यापित करना
आपके सत्यापन हैंडलर को कुकी स्टोर का उपयोग करके क्लाइंट की कुकी से सत्र को पुनः प्राप्त करना चाहिए प्राप्त तरीका। फिर आप सत्र को पुनः प्राप्त कर सकते हैं और उपयोगकर्ता को प्रमाणित कर सकते हैं।
समारोहcheckAuthStatus(लेखक http. प्रतिक्रिया लेखक, अनुरोध *http. प्रार्थना) {
सत्र, त्रुटि: = कुकीस्टोर ()। प्राप्त करें (अनुरोध, "अनुरोध से कुकी नाम")यदि गलती!= शून्य {
लकड़ी का लट्ठा। फैटॉलन (गलती)
}प्रमाणित: = सत्र। मान ["प्राधिकरण स्थिति"]
यदि प्रमाणित == सच {
लेखक। राइट हैडर (http. स्थिति ठीक है) // 200 स्टेटस कोड लिखें
वापसी
} वरना {
लेखक। राइट हैडर (http. StatusBadRequest) // 400 http स्थिति कोड लिखें
वापसी
}
}
प्रमाणीकृत चर का उपयोग करता है मूल्यों संपत्ति कुकी स्टोर से स्थिति पुनर्प्राप्त करने के लिए। यदि कथन तब इस प्रमाणीकरण स्थिति की पुष्टि करता है। यदि यह मूल्यांकन करता है सच, ग्राहक को 200. प्राप्त होता है HTTP स्थिति कोड. यदि प्रमाणीकरण स्थिति सही नहीं है, तो क्लाइंट को 400 HTTP स्थिति कोड प्राप्त होता है।
सत्र लॉगआउट हैंडलर
आपका लॉगआउट हैंडलर फ़ंक्शन, लॉगिन हैंडलर फ़ंक्शन के समान होगा। आप कुकी स्टोर से उपयोगकर्ता के सत्र से संबंधित सभी डेटा हटा देंगे और प्रमाणीकरण स्थिति को रद्द कर देंगे।
समारोहलॉग आउट(लेखक http. प्रतिक्रिया लेखक, अनुरोध *http. प्रार्थना) {
सत्र, त्रुटि: = कुकीस्टोर ()। प्राप्त करें (अनुरोध, "अनुरोध से कुकी नाम")यदि गलती!= शून्य {
वापसी
}// कुकी स्टोर से उपयोगकर्ता के सत्र को रद्द करें
सत्र। मान ["प्राधिकरण स्थिति"] = असत्य
त्रुटि = सत्र। सहेजें (अनुरोध, लेखक)
यदि गलती!= शून्य {
वापसी
}
}
लॉग आउट हैंडलर फ़ंक्शन उपयोगकर्ता के सत्र प्रमाणीकरण स्थिति को रद्द कर देता है और स्थिति को कुकी स्टोर में सहेजता है।
सत्रों में संवेदनशील डेटा स्टोर न करें
सत्र डेटा संग्रहीत करने के लिए बहुत अच्छे हैं, लेकिन उनमें संवेदनशील डेटा संग्रहीत करने से बचना सबसे अच्छा है। एक हमलावर एक सत्र को हाईजैक कर सकता है यदि आप उसका डेटा कुकी में संग्रहीत करते हैं और इसे सादे HTTP पर भेजते हैं। आपके ऐप की सुरक्षा आपके उपयोगकर्ताओं के लिए महत्वपूर्ण है।
सत्र स्टेटफुल हैं और गोरिल्ला पैकेज के लिए SQL और NoSQL दोनों डेटाबेस के लिए कुकी स्टोर के कई डेटाबेस कार्यान्वयन हैं।