मैंने वही समस्या बताई है जिसका आप वर्णन करते हैं। मैं जिस वेब साइट का निर्माण कर रहा हूं, उसे मोबाइल फोन और ब्राउज़र से एक्सेस किया जा सकता है, इसलिए मुझे उपयोगकर्ताओं को साइनअप करने, लॉगिन करने और कुछ विशिष्ट कार्यों को करने के लिए एक एपीआई की आवश्यकता है। इसके अलावा, मुझे स्केलेबिलिटी, विभिन्न प्रक्रियाओं / मशीनों पर चलने वाले समान कोड का समर्थन करने की आवश्यकता है।
क्योंकि उपयोगकर्ता संसाधनों को सृजित कर सकते हैं (उर्फ POST / PUT क्रियाएँ) आपको अपने एपीआई को सुरक्षित करने की आवश्यकता है। आप ओउथ का उपयोग कर सकते हैं या आप अपना स्वयं का समाधान बना सकते हैं, लेकिन ध्यान रखें कि पासवर्ड को खोजने के लिए वास्तव में आसान होने पर सभी समाधान टूट सकते हैं। मूल विचार उपयोगकर्ताओं को उपयोगकर्ता नाम, पासवर्ड और एक टोकन का उपयोग करके प्रमाणित करने का है, एपिटोकन। यह एपिटोकैन नोड- यूआईडी का उपयोग करके उत्पन्न किया जा सकता है और पासवर्ड को pbkdf2 का उपयोग करके हैशेड किया जा सकता है
फिर, आपको सत्र को कहीं और सहेजने की आवश्यकता है। यदि आप इसे एक सादे ऑब्जेक्ट में मेमोरी में सहेजते हैं, यदि आप सर्वर को मारते हैं और इसे फिर से रिबूट करते हैं तो सत्र नष्ट हो जाएगा। इसके अलावा, यह स्केलेबल नहीं है। यदि आप मशीनों के बीच संतुलन लोड करने के लिए हैप्रोक्सी का उपयोग करते हैं या यदि आप केवल श्रमिकों का उपयोग करते हैं, तो यह सत्र स्थिति एक ही प्रक्रिया में संग्रहीत की जाएगी ताकि यदि उसी उपयोगकर्ता को किसी अन्य प्रक्रिया / मशीन पर पुनर्निर्देशित किया जाए तो उसे फिर से प्रमाणित करने की आवश्यकता होगी। इसलिए आपको सत्र को एक सामान्य स्थान पर संग्रहीत करने की आवश्यकता है। यह आमतौर पर रेडिस का उपयोग करके किया जाता है।
जब उपयोगकर्ता प्रमाणित हो जाता है (उपयोगकर्ता नाम + पासवर्ड + एपिटोकेन) सत्र के लिए एक और टोकन उत्पन्न करता है, तो उर्फ accesstoken। फिर से, नोड-यूयूआईडी के साथ। उपयोगकर्ता को accesstoken और userid को भेजें। उपयोगकर्ता (कुंजी) और accesstoken (मान) के साथ रेडिस में संग्रहीत किया जाता है और समय समाप्त होता है, जैसे 1 एच।
अब, हर बार उपयोगकर्ता बाकी एपीआई का उपयोग करके किसी भी ऑपरेशन को करता है, इसके लिए उपयोगकर्ता को और accesstoken को भेजना होगा।
यदि आप उपयोगकर्ताओं को शेष एपीआई का उपयोग करके साइनअप करने की अनुमति देते हैं, तो आपको एक व्यवस्थापक एपिटोकेन के साथ एक व्यवस्थापक खाता बनाने और उन्हें मोबाइल ऐप में संग्रहीत करने की आवश्यकता होगी (उपयोगकर्ता नाम + पासवर्ड + एपिटोकेन एन्क्रिप्ट करें) क्योंकि नए उपयोगकर्ताओं के पास एपिटोकन नहीं होगा वे साइन अप करते हैं।
वेब भी इस एपीआई का उपयोग करता है, लेकिन आपको एपिटोकेंस का उपयोग करने की आवश्यकता नहीं है। आप रेडिस स्टोर के साथ एक्सप्रेस का उपयोग कर सकते हैं या ऊपर वर्णित एक ही तकनीक का उपयोग कर सकते हैं लेकिन एपिटोकन चेक को दरकिनार करके उपयोगकर्ता को कुकी में उपयोगकर्ता + एक्सीस्टोकोकन वापस कर सकते हैं।
यदि आपके पास निजी क्षेत्र हैं, तो उपयोगकर्ता को प्रमाणित होने पर अनुमत उपयोगकर्ताओं के साथ तुलना करें। आप उपयोगकर्ताओं को भूमिकाएँ भी लागू कर सकते हैं।
सारांश:
एपिटोकेन के बिना एक विकल्प HTTPS का उपयोग करना और प्राधिकरण हेडर में उपयोगकर्ता नाम और पासवर्ड भेजना और उपयोगकर्ता को रेडिस में कैश करना होगा।