दो-कारक प्रमाणीकरण उपयोगकर्ता की ओर से एक बहुत ही सामान्य प्रक्रिया की तरह लग सकता है। कई लंबे समय से इस तथ्य के आदी हैं कि कई अनुप्रयोगों का उपयोग करते समय, एक परिचित लॉगिन और पासवर्ड संयोजन दर्ज करना पर्याप्त नहीं है। अतिरिक्त सुरक्षा के लिए और अनधिकृत पहुंच को रोकने के लिए एक अतिरिक्त सत्यापन कारक पेश किया गया है। ज्यादातर मामलों में, यह एक अनूठा कोड है जिसे ई-मेल या एसएमएस द्वारा प्राप्त किया जा सकता है।
इस ट्यूटोरियल में, हम सीखेंगे कि आप AppMaster में टू-फैक्टर ऑथेंटिकेशन कैसे लागू कर सकते हैं। एक उदाहरण के रूप में, कोड को मेल पर भेजने का उपयोग किया जाएगा। हम विश्लेषण करेंगे कि किन मॉड्यूलों को कनेक्ट करने की आवश्यकता है, कौन सी सेटिंग करनी है, कौन सी व्यावसायिक प्रक्रिया बनाना है, और व्यवहार में तैयार परिणाम की जांच कैसे करें।
सबसे पहले, आइए सामान्य योजना पर एक नज़र डालें। हमारी व्यावसायिक प्रक्रिया में किन चरणों को लागू करने की आवश्यकता है?
- लॉगिन सत्यापन (सुनिश्चित करें कि उपयोगकर्ता वास्तव में पंजीकृत है)।
- जाँच कर रहा है कि पासवर्ड सही है या नहीं।
- मेल या एसएमएस द्वारा एक पुष्टिकरण कोड भेजना।
- कोड की प्रासंगिकता की जाँच करना।
- कोड की शुद्धता की जाँच करना।
- प्रमाणीकरण का पूरा होना।
प्रारंभिक चरण
इससे पहले कि आप दो-कारक प्रमाणीकरण डिज़ाइन करना शुरू करें, उपयोगकर्ता पंजीकरण चरण में, आपको यह सुनिश्चित करने की आवश्यकता है कि:
- उपयोगकर्ता डेटा में एक ई-मेल होना चाहिए। इसका उपयोग सत्यापन कोड भेजने के लिए किया जाएगा। ई-मेल का उपयोग अक्सर लॉगिन के रूप में किया जाता है, और हम ऐसे ही एक उदाहरण को देखेंगे।
- लॉगिन अद्वितीय है। एक ही लॉगिन वाले दो अलग-अलग उपयोगकर्ता सिस्टम में मौजूद नहीं हो सकते।
इन (और कई अन्य) कार्यों को हल करने की सुविधा के लिए, प्रत्येक AppMaster प्रोजेक्ट में डिफ़ॉल्ट रूप से Auth मॉड्यूल स्थापित किया गया है। इसमें उनके उपयोग के लिए आवश्यक डेटाबेस मॉडल, व्यवसाय प्रक्रिया ब्लॉक और समापन बिंदु शामिल हैं।
लॉगइन प्रमाणीकरण
लॉग इन, पासवर्ड और सत्यापन कोड का उपयोग व्यवसाय प्रक्रिया के इनपुट पैरामीटर के रूप में किया जाता है। लेकिन पहले चरण में, हमें केवल एक लॉगिन की आवश्यकता होती है। यह सुनिश्चित करने में मदद करेगा कि यह उपयोगकर्ता मौजूद है। उसे पंजीकृत किया गया है, और इसके बारे में जानकारी डेटाबेस में संग्रहीत है।
ऐसा करने के लिए, DB: Search User ब्लॉक डेटाबेस में दिए गए लॉगिन के साथ उपयोगकर्ता की खोज करता है। सटीक मिलान खोजने के लिए SearchExact = True पैरामीटर सेट करना सुनिश्चित करें।
प्राप्त डेटा को इंडेक्स 0 के साथ Array Element ब्लॉक में पास किया जाता है (गिनती शून्य से शुरू होती है, और पाया गया एकमात्र मान हमेशा एरे में इंडेक्स 0 के अनुरूप होगा)।
Is Null ब्लॉक जाँचता है कि क्या उपयोगकर्ता वास्तव में पाया गया था। और परिणाम ( True/False ) के आधार पर, If-Else ब्लॉक या तो एक त्रुटि संदेश ( Raise Error ब्लॉक) के साथ व्यावसायिक प्रक्रिया को बाधित करेगा या इसे आगे निर्देशित करेगा।
पासवर्ड चेक
इस स्तर पर, आपको यह सुनिश्चित करने की आवश्यकता है कि उपयोगकर्ता पासवर्ड सही ढंग से दर्ज किया गया है।
और यहां, यह समझना आवश्यक है कि डेटाबेस में पासवर्ड स्पष्ट रूप से संग्रहीत नहीं होते हैं। Bcrypt फ़ंक्शन उन्हें हैश करता है, और केवल परिणामी हैश डेटाबेस में संग्रहीत होता है। इसलिए, भले ही हम मान लें कि डेटा लीक हो जाएगा, फिर भी हमलावर उपयोगकर्ता पासवर्ड नहीं ढूंढ पाएंगे; वे सुरक्षित रूप से एन्क्रिप्टेड हैं।
इस कारण से, आप केवल डेटाबेस से पासवर्ड प्राप्त नहीं कर सकते हैं और इसकी तुलना दर्ज किए गए पासवर्ड से नहीं कर सकते हैं। आपको पासवर्ड का हैश प्राप्त करने और तुलना के लिए इसका उपयोग करने की आवश्यकता है। इस समस्या को हल करने के लिए, Auth: Probe Password ब्लॉक का उपयोग किया जाता है। इनपुट पैरामीटर के रूप में, यह उपयोगकर्ता ( password ) द्वारा दर्ज पासवर्ड और डेटाबेस में संग्रहीत पासवर्ड का हैश ( hashed_password ) लेता है और इसे String डेटा प्रकार ( To String ब्लॉक) में परिवर्तित करता है।
परिणाम के आधार पर, पिछले चरण की तरह, If-Else ब्लॉक का उपयोग करके, हम या तो एक त्रुटि संदेश प्रदर्शित करते हैं ( Raise Error , Message = Password is wrong ) या प्रक्रिया को अगले चरण में निर्देशित करते हैं।
उपयोगकर्ता मॉडल एक्सटेंशन
अगले चरण के लिए, आपको उपयोगकर्ता मॉडल में एक छोटा सा बदलाव करना होगा और उस कोड के बारे में जानकारी जोड़नी होगी जिसकी पुष्टि करने की आवश्यकता है।
सामान्य तौर पर, User मॉडल में शुरू में फ़ील्ड होते हैं जिनका उपयोग इस कार्य के लिए किया जा सकता है - Confirmed, Confirmation code, Confirmation code expires at । लेकिन इस उदाहरण में, हम मान लेंगे कि इन क्षेत्रों का उपयोग केवल पंजीकरण और प्रारंभिक खाता सत्यापन के लिए किया जाता है।
प्रक्रिया की अधिक स्पष्टता के लिए, आइए एक अलग twofa ( two-factor authentication ) मॉडल बनाएं, User मॉडल को इसके साथ संबद्ध करें (1-से-1 संबंध, has one ), और एक फ़ील्ड - code ( String प्रकार) जोड़ें।
ईमेल भेजने की तैयारी
पुष्टिकरण कोड के साथ ई-मेल भेजने के लिए, प्रारंभिक तैयारी करनी चाहिए। सबसे सुलभ विकल्पों में से एक Custom SMTP मॉड्यूल का उपयोग करना है, जिसे आपको स्थापित और कॉन्फ़िगर करने की आवश्यकता है।
Gmail का उपयोग करते समय, अधिकांश सेटिंग पहले से ही डिफ़ॉल्ट रूप से सेट होती हैं, और आपको अपना उपयोगकर्ता नाम और पासवर्ड जोड़ने की आवश्यकता होती है। अन्य मेल सर्वर का उपयोग करते समय, यदि आप आवश्यक डेटा प्राप्त करने के लिए उनके दस्तावेज़ों को संदर्भित करते हैं तो यह मदद करेगा।
इस मामले में, आपको मेल सर्वर की सुरक्षा सेटिंग्स को थोड़ा बदलना पड़ सकता है। उदाहरण के लिए, Gmail डिफ़ॉल्ट रूप से तृतीय-पक्ष एप्लिकेशन का उपयोग करके कनेक्शन को ब्लॉक कर सकता है, और आपको सेटिंग्स में इस प्रतिबंध को हटाने की आवश्यकता है।
सत्यापन कोड भेजा जा रहा है
हमने लॉगिन और पासवर्ड की जाँच की और सभी आवश्यक तैयारी पूरी कर ली, इसलिए अब आप एक पुष्टिकरण कोड के साथ एक पत्र भेजने के लिए आगे बढ़ सकते हैं।
Custom SMTP: Send Email ब्लॉक एक गंतव्य के रूप में पतों की एक सरणी का उपयोग करता है। इसलिए, भले ही आपको केवल एक पते पर एक पत्र भेजने की आवश्यकता हो, इसे सरणी में जोड़ा जाना चाहिए। इसके लिए Append Array ब्लॉक का उपयोग किया जाता है।
अगला कदम एक सत्यापन कोड उत्पन्न करना है। Random string ब्लॉक इसके लिए उपयुक्त है। हम 6 यादृच्छिक संख्याओं वाला एक कोड भेजेंगे और उपयुक्त सेटिंग करेंगे। Length = 6, With 0-9 = True , अन्य सभी पैरामीटर = False ।
इसके बाद, आपको पत्र का पाठ बनाना होगा। ऐसा करने के लिए, उत्पन्न कोड ( First = Verification code: :) में व्याख्यात्मक पाठ जोड़ने के लिए Concat Strings ब्लॉक का उपयोग करें, परिणाम को Text डेटा प्रकार ( To Text ब्लॉक में) में बदलें, और परिणाम को ईमेल के body पैरामीटर से कनेक्ट करें। भेजने का ब्लॉक।
अंतिम भेजने के लिए, यह केवल पत्र ( subject ) और प्रेषक ( from_name ) के विषय को निर्दिष्ट करने के लिए रहता है।
लेकिन केवल कोड भेजने के लिए पर्याप्त नहीं है; इसे उपयोगकर्ता के डेटा में भी संग्रहीत किया जाना चाहिए। आखिरकार, जब उपयोगकर्ता कोड प्राप्त करता है और उसे पुष्टि के रूप में वापस भेजता है, तो आपको इसकी शुद्धता को सत्यापित करने की आवश्यकता होती है।
ऐसा करने के लिए, हम twofa मॉडल का उपयोग करेंगे, जिसे हमने पहले समझदारी से बनाया था। यदि यह पहला कोड सबमिशन है, तो आपको इसे इस जानकारी के साथ बनाना होगा कि यह किस उपयोगकर्ता से संबंधित है। पुन: उपयोग के मामले में, मौजूदा प्रविष्टि को उसकी आईडी और नए कोड का संकेत देते हुए पैच करना आवश्यक है।
चरण का अंतिम चरण ई-मेल पर कोड भेजने के बारे में संदेश वापस करने के लिए Raise Error ब्लॉक का उपयोग करना है।
कोड प्रासंगिकता जांच
यह अतिरिक्त सुरक्षा का ध्यान रखने और कोड को एक साधारण गणना से बचाने के लायक है। इनपुट प्रयासों की संख्या, उनकी आवृत्ति और सबमिट किए गए कोड के जीवनकाल को सीमित करना बुद्धिमानी होगी। हम इन सभी उदाहरणों का विश्लेषण नहीं करेंगे; सुरक्षा आवश्यकताएं प्रत्येक परियोजना के लिए अलग-अलग होती हैं और इसमें कई अलग-अलग शर्तें शामिल हो सकती हैं। हम अपनी वैधता अवधि के आधार पर कोड की प्रासंगिकता की जांच करने के लिए खुद को प्रतिबंधित करते हैं।
आइए वर्तमान समय प्राप्त करने के लिए Current date & time ब्लॉक का उपयोग करें। इसे Date & time difference ब्लॉक के B पैरामीटर से कनेक्ट करें। हम twofa मॉडल के UpdatedAt फ़ील्ड को पैरामीटर A के रूप में उपयोग करेंगे।
नतीजतन, हमें Time span मिलती है - दो समय बिंदुओं के बीच का अंतर। यह केवल जाँच करने के लिए रहता है कि क्या यह अंतर एक निश्चित चयनित मूल्य से अधिक है। हमारे उदाहरण में, यह 5 मिनट है, जिसे हम Greater ब्लॉक के स्थिर मान B के रूप में सेट करेंगे।
If-Else ब्लॉक प्रक्रिया को आगे बढ़ाने के लिए तुलना परिणाम का उपयोग करेगा। यदि True है (अंतर 5 मिनट से अधिक है), तो प्रक्रिया पत्र भेजने के चरण में वापस आ जाएगी; उपयोगकर्ता को एक अद्यतन कोड प्राप्त होगा। False के मामले में (कोड ताजा और अद्यतित है), इस कोड की जांच के लिए आगे बढ़ना संभव होगा।
को़ड समीक्षा
प्रमाणीकरण का अंतिम चरण प्राप्त कोड की जांच कर रहा है।
Equal ब्लॉक को यह सत्यापित करना होगा कि उपयोगकर्ता द्वारा पास किया गया कोड उपयोगकर्ता से जुड़े twofa मॉडल में संग्रहीत कोड से मेल खाता है। यदि ऐसा नहीं है और कोड गलत तरीके से निर्दिष्ट किया गया है ( If-Else -> False ), तो आपको एक त्रुटि संदेश प्रदर्शित करने की आवश्यकता है ( Raise Error , Message = Code is wrong )। यदि तुलना मैच की पुष्टि करती है, तो आप अंतिम प्रमाणीकरण चरण के लिए आगे बढ़ सकते हैं।
ऐसा करने के लिए, हम Auth: Authentication ब्लॉक का उपयोग करते हैं और उपयोगकर्ता के बारे में उसके प्राधिकरण टोकन के साथ जानकारी प्राप्त करते हैं। सफल प्रमाणीकरण के परिणामस्वरूप हम उन्हें End ब्लॉक में भेज देते हैं।
एक समापन बिंदु बनाना
व्यवसाय प्रक्रिया बनाई गई है लेकिन अभी तक उपयोग के लिए उपलब्ध नहीं है। आपको एक ऐसा समापन बिंदु बनाना होगा जो इस व्यवसाय प्रक्रिया को चलाएगा।
डिफ़ॉल्ट प्रमाणीकरण समापन बिंदु ( POST /Auth ) का उपयोग करने के लिए एक उचित समाधान होगा। यह अपनी व्यावसायिक प्रक्रिया को बदलने और अभी बनाई गई प्रक्रिया को स्थापित करने के लिए पर्याप्त होगा। इस प्रकार, सरल प्रमाणीकरण अक्षम हो जाएगा, और इसके बजाय दो-कारक प्रमाणीकरण का उपयोग किया जाएगा।
प्रकाशन और परीक्षण
यह दो-कारक प्रमाणीकरण के निर्माण को पूरा करता है। आप परिणाम प्रकाशित कर सकते हैं और इसे कार्रवाई में देख सकते हैं। इसके लिए Swagger का उपयोग करना सुविधाजनक है, जिसे Preview बटन के Project API सेक्शन में डिप्लॉय प्लान के नाम पर क्लिक करके एक्सेस किया जा सकता है।
यह केवल सूची में वांछित समापन बिंदु खोजने, उपयोगकर्ता डेटा दर्ज करने और Execute बटन के साथ निष्पादन शुरू करने के लिए बनी हुई है। यदि परीक्षण के दौरान कोई त्रुटि पाई जाती है, तो व्यवसाय प्रक्रिया पर वापस लौटें और आवश्यक परिवर्तन करें।