Cognito User Pools
मौलिक जानकारी
एक उपयोगकर्ता पूल अमेज़न कोग्निटो में एक उपयोगकर्ता निर्देशिका है। एक उपयोगकर्ता पूल के साथ, आपके उपयोगकर्ता अमेज़न कोग्निटो के माध्यम से अपने वेब या मोबाइल ऐप्लिकेशन में साइन इन कर सकते हैं, या तीसरे पक्ष द्वारा फेडरेट कर सकते हैं (आईडीपी)। चाहे आपके उपयोगकर्ता सीधे साइन इन करें या तीसरे पक्ष के माध्यम से, उपयोगकर्ता पूल के सभी सदस्यों के पास एक निर्देशिका प्रोफ़ाइल होता है जिसका आप एक एसडीके के माध्यम से उपयोग कर सकते हैं।
उपयोगकर्ता पूल प्रदान करते हैं:
साइन-अप और साइन-इन सेवाएं।
उपयोगकर्ताओं को साइन इन करने के लिए एक निर्मित, अनुकूलनीय वेब यूआई।
Facebook, Google, Login with Amazon, और Sign in with Apple के साथ सामाजिक साइन-इन, और उपयोगकर्ता पूल से SAML और OIDC आईडेंटिटी प्रदाताओं के माध्यम से साइन-इन।
उपयोगकर्ता निर्देशिका प्रबंधन और उपयोगकर्ता प्रोफ़ाइल।
बहु-कारक प्रमाणीकरण (MFA), कंप्रोमाइज़्ड क्रेडेंशियल के लिए जांच, खाता लेने की सुरक्षा, और फोन और ईमेल सत्यापन जैसी सुरक्षा सुविधाएं।
AWS लैम्बडा ट्रिगर के माध्यम से अनुकूलित वर्कफ़्लो और उपयोगकर्ता प्रवास।
एप्लिकेशनों का स्रोत कोड आम तौर पर उपयोगकर्ता पूल आईडी और क्लाइंट एप्लिकेशन आईडी (और कभी-कभी एप्लिकेशन सीक्रेट?) भी शामिल होता है, जो एक उपयोगकर्ता को Cognito उपयोगकर्ता पूल में लॉगिन करने के लिए आवश्यक होते हैं।
संभावित हमले
पंजीकरण: डिफ़ॉल्ट रूप से एक उपयोगकर्ता खुद को पंजीकृत कर सकता है, इसलिए वह अपने लिए एक उपयोगकर्ता बना सकता है।
उपयोगकर्ता गणना: पंजीकरण कार्यक्षमता का उपयोग करके पहचानी जा सकती है कि पहले से मौजूद उपयोगकर्ता नाम हैं। यह जानकारी ब्रूट-फोर्स हमले के लिए उपयोगी हो सकती है।
लॉगिन ब्रूट-फोर्स: प्रमाणीकरण खंड में आपके पास सभी विधियाँ हैं जिनका उपयोगकर्ता को लॉगिन करने के लिए करना होता है, आप उन्हें ब्रूट-फोर्स कर सकते हैं वैध क्रेडेंशियल्स खोजने के लिए।
पेंटेस्टिंग के लिए उपकरण
Pacu, AWS शोषण ढांचा, अब "cognito__enum" और "cognito__attack" मॉड्यूल शामिल करता है जो एक खाते में सभी कोग्निटो संपत्तियों की गणना को स्वचालित करता है और कमजोर विन्यास, उपयोगकर्ता गुणधर्म जो उपयोग के लिए उपयोग किए जाते हैं, आदि को ध्वजित करता है, और उपयोगकर्ता निर्माण (जिसमें एमएफए समर्थन शामिल है) और सुधार उच्चता को स्वचालित करता है जो संशोधनीय कस्टम गुणधर्मों, उपयोगी पहचानी गई पहुंचता पूल क्रेडेंशियल्स, आदि में आधारित उपयोगकर्ता उच्चता।
मॉड्यूल के कार्यों का विवरण देखने के लिए ब्लॉग पोस्ट के भाग 2 देखें। स्थापना निर्देशिकाओं के लिए मुख्य Pacu पृष्ठ देखें।
उपयोग
एक दिये गए पहुंचता पूल और उपयोगकर्ता पूल क्लाइंट के खिलाफ उपयोगकर्ता निर्माण और सभी प्रिवेसेक वेक्टर का प्रयास करने के लिए उदाहरण cognito__attack उपयोग:
वर्तमान AWS खाते में दिखाई देने वाले सभी उपयोगकर्ता पूल, उपयोगकर्ता पूल क्लाइंट, पहचान पूल, उपयोगकर्ता आदि को एकत्रित करने के लिए नमूना cognito__enum उपयोग:
Cognito Scanner एक CLI टूल है जो पायथन में है और जो Cognito पर विभिन्न हमले को अमल में लाता है, जिसमें अवांछित खाता निर्माण और खाता ऑरेकल शामिल हैं।
स्थापना
उपयोग
अधिक जानकारी के लिए https://github.com/padok-team/cognito-scanner देखें
पंजीकरण
उपयोगकर्ता पूल द्वारा डिफ़ॉल्ट रूप से नए उपयोगकर्ता को पंजीकृत करने की अनुमति है।
यदि कोई भी रजिस्टर कर सकता है
आपको एक त्रुटि मिल सकती है जिसमें आपको उपयोगकर्ता के बारे में अधिक विवरण प्रदान करने की आवश्यकता है:
आप JSON के माध्यम से आवश्यक विवरण प्रदान कर सकते हैं:
आप इस कार्यक्षमता का उपयोग करके मौजूदा उपयोगकर्ताओं की जांच कर सकते हैं। जब उस नाम से पहले से ही उपयोगकर्ता मौजूद होता है, तो यह त्रुटि संदेश है:
पिछले कमांड में ध्यान दें कि कस्टम विशेषताएँ "custom:" से शुरू होती हैं। यह भी जान लें कि पंजीकरण करते समय आप उपयोगकर्ता के लिए नए कस्टम विशेषताएँ नहीं बना सकते। आप केवल डिफ़ॉल्ट विशेषताओं को मान (जो अगर आवश्यक नहीं हैं तो भी) और निर्दिष्ट कस्टम विशेषताएँ को ही दे सकते हैं।
या बस यह जांचने के लिए कि क्लाइंट आईडी मौजूद है या नहीं। यदि क्लाइंट आईडी मौजूद नहीं है तो यह त्रुटि है:
अगर केवल व्यवस्थापक ही उपयोगकर्ताओं को रजिस्टर कर सकता है
आप यह त्रुटि पाएंगे और आप उपयोगकर्ताओं को रजिस्टर या गणना नहीं कर पाएंगे:
पंजीकरण की पुष्टि करना
Cognito को एक नए उपयोगकर्ता की पुष्टि करने के लिए उसके ईमेल या फोन नंबर की पुष्टि करने की अनुमति है। इसलिए, एक उपयोगकर्ता बनाते समय आम तौर पर आपको कम से कम उपयोगकर्ता नाम और पासवर्ड और ईमेल और/या फोन नंबर की आवश्यकता होगी। बस एक जिसे आप नियंत्रण में रखते हैं सेट करें ताकि आपको अपने नए उपयोगकर्ता खाते की पुष्टि कोड प्राप्त हो।
भले ही ऐसा लगता है कि आप एक ही ईमेल और फोन नंबर का उपयोग कर सकते हैं, लेकिन जब आपने बनाए गए उपयोगकर्ता को सत्यापित करने की आवश्यकता होगी, तो Cognito उसी जानकारी का उपयोग करने के बारे में शिकायत करेगा और खाता सत्यापित करने देगा नहीं।
विशेषाधिकार उन्नति / विशेषताएँ अपडेट करना
डिफ़ॉल्ट रूप से एक उपयोगकर्ता अपनी विशेषताओं की मान को संशोधित कर सकता है कुछ इस प्रकार:
कस्टम विशेषता प्राइवेस्क
आपको यहाँ कस्टम विशेषताएँ उपयोग में आ सकती हैं (जैसे isAdmin
), क्योंकि डिफ़ॉल्ट रूप से आप अपनी विशेषताओं के मानों को बदल सकते हैं, आप खुद ही मान्यता बढ़ा सकते हैं और अपने आप को उच्च स्तर पर बढ़ा सकते हैं!
ईमेल/उपयोगकर्ता नाम संशोधन प्राइवेस्क
आप इसका उपयोग करके एक उपयोगकर्ता के ईमेल और फ़ोन नंबर को संशोधित कर सकते हैं, लेकिन फिर भी, यदि खाता सत्यापित रहता है, तो वे विशेषताएँ असत्यापित स्थिति में सेट हो जाती हैं (आपको उन्हें फिर से सत्यापित करना होगा)।
आप ईमेल या फ़ोन नंबर के साथ लॉगिन नहीं कर पाएंगे जब तक आप उन्हें सत्यापित नहीं करते, लेकिन आप उपयोगकर्ता नाम के साथ लॉगिन कर सकते हैं।
ध्यान दें कि यदि ईमेल को संशोधित किया गया और सत्यापित नहीं किया गया है तो यह ID टोकन के अंदर दिखाई देगा ईमेल
फ़ील्ड में और फ़ील्ड ईमेल सत्यापित
असत्य होगा, लेकिन यदि ऐप उसे जांचने में नहीं है तो आप अन्य उपयोगकर्ताओं का अनुकरण कर सकते हैं।
इसके अतिरिक्त, ध्यान दें कि आप नाम
फ़ील्ड में कुछ भी डाल सकते हैं बस नाम विशेषता को संशोधित करके। यदि कोई ऐप उसे जांच रहा है वह फ़ील्ड किसी कारण से ईमेल
(या किसी अन्य विशेषता) के बजाय तो आप अन्य उपयोगकर्ताओं का अनुकरण कर सकते हैं।
वैसे भी, यदि किसी कारण से आपने अपना ईमेल उदाहरण के लिए एक नए ईमेल पर बदल दिया है तो आप उस ईमेल पते में प्राप्त कोड के साथ ईमेल की पुष्टि कर सकते हैं:
ईमेल
की बजाय phone_number
का उपयोग करें एक नए फोन नंबर को बदलने/सत्यापित करने के लिए।
व्यवस्थापक यह विकल्प सक्षम कर सकता है कि उपयोगकर्ता पसंदीदा उपयोगकर्ता नाम के साथ लॉगिन करें। ध्यान दें कि आप इस मान्यता देने वाले उपयोगकर्ता के रूप में किसी भी उपयोगकर्ता नाम या पसंदीदा_उपयोगकर्ता के मूल्य को बदलने की अनुमति नहीं होगी जिसका उपयोग किसी भिन्न उपयोगकर्ता का अनुकरण करने के लिए किया जा सकता है।
पासवर्ड को पुनः प्राप्त/बदलें
यह संभव है कि पासवर्ड को पुनः प्राप्त करना बस उपयोगकर्ता का नाम जानने (या ईमेल या फोन भी स्वीकार किया जाता है) और उसका एक कोड वहां भेजा जाएगा:
सर्वर का प्रतिक्रिया हमेशा सकारात्मक होगा, जैसे कि उपयोगकर्ता नाम मौजूद है। आप उपयोगकर्ताओं की जांच करने के लिए इस विधि का उपयोग नहीं कर सकते
कोड के साथ आप पासवर्ड बदल सकते हैं:
पासवर्ड बदलने के लिए पिछला पासवर्ड पता होना चाहिए:
प्रमाणीकरण
एक उपयोगकर्ता पूल इसे प्रमाणित करने के लिए विभिन्न तरीके समर्थन करता है। यदि आपके पास एक उपयोगकर्ता नाम और पासवर्ड हैं तो लॉगिन करने के लिए भी विभिन्न विधियाँ समर्थित हैं। इसके अतिरिक्त, जब एक उपयोगकर्ता पूल में प्रमाणित होता है, तो पूल में 3 प्रकार के टोकन दिए जाते हैं: आईडी टोकन, एक्सेस टोकन और रिफ्रेश टोकन।
आईडी टोकन: इसमें प्रमाणित उपयोगकर्ता की पहचान के बारे में दावे शामिल होते हैं, जैसे
नाम
,ईमेल
, औरफोन_नंबर
। आईडी टोकन का उपयोग उपयोगकर्ताओं को आपके संसाधन सर्वर या सर्वर एप्लिकेशन में प्रमाणित करने के लिए भी किया जा सकता है। आपको आईडी टोकन के सिग्नेचर की सत्यापन करना होगा पहले से ही आप किसी भी दावों पर भरोसा कर सकें जो आईडी टोकन में हैं अगर आप इसे बाह्य एप्लिकेशनों में उपयोग करते हैं।आईडी टोकन वह टोकन है जो उपयोगकर्ता के गुणों के मान को शामिल करता है, यहाँ तक कि कस्टम गुणों को भी।
एक्सेस टोकन: इसमें प्रमाणित उपयोगकर्ता के बारे में दावे, उपयोगकर्ता के समूहों की सूची, और स्कोप्स की सूची शामिल होती है। एक्सेस टोकन का उद्देश्य है उपयोगकर्ता पूल में उपयोगकर्ता के संदर्भ में API ऑपरेशनों को अधिकृत करना। उदाहरण के लिए, आप एक्सेस टोकन का उपयोग करके अपने उपयोगकर्ता को उनके गुणों में जोड़ने, बदलने, या हटाने का अधिकार प्रदान करने के लिए कर सकते हैं।
रिफ्रेश टोकन: रिफ्रेश टोकन के साथ आप नए आईडी टोकन और एक्सेस टोकन प्राप्त कर सकते हैं उपयोगकर्ता के लिए जब तक रिफ्रेश टोकन अमान्य नहीं हो जाता। डिफ़ॉल्ट रूप से, रिफ्रेश टोकन 30 दिनों के बाद समाप्त हो जाता है जब आपकी एप्लिकेशन उपयोगकर्ता अपने उपयोगकर्ता पूल में साइन इन करता है। जब आप अपने उपयोगकर्ता पूल के लिए एक एप्लिकेशन बनाते हैं, तो आप एप्लिकेशन के रिफ्रेश टोकन समाप्ति को 60 मिनट और 10 वर्ष के बीच किसी भी मान पर सेट कर सकते हैं।
ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH
यह सर्वर साइड प्रमाणीकरण फ्लो है:
सर्वर साइड ऐप
AdminInitiateAuth
API ऑपरेशन को कॉल करता है (बजायInitiateAuth
). इस ऑपरेशन के लिए AWS क्रेडेंशियल की आवश्यकता होती है जिसमेंcognito-idp:AdminInitiateAuth
औरcognito-idp:AdminRespondToAuthChallenge
जैसे अनुमतियाँ शामिल होती हैं। यह ऑपरेशन आवश्यक प्रमाणीकरण पैरामीटर लौटाता है।सर्वर साइड ऐप के पास प्रमाणीकरण पैरामीटर होने के बाद, वह
AdminRespondToAuthChallenge
API ऑपरेशन को कॉल करता है।AdminRespondToAuthChallenge
API ऑपरेशन केवल तब सफल होता है जब आप AWS क्रेडेंशियल प्रदान करते हैं।
यह मेथड डिफ़ॉल्ट रूप से सक्षम नहीं है।
लॉगिन करने के लिए आपको जानने की आवश्यकता है:
उपयोगकर्ता पूल आईडी
क्लाइंट आईडी
उपयोगकर्ता नाम
पासवर्ड
क्लाइंट सीक्रेट (केवल यदि ऐप को एक गुप्त सेट करने के लिए कॉन्फ़िगर किया गया है)
इस मेथड के साथ लॉगिन करने के लिए उस एप्लिकेशन को लॉगिन करने की अनुमति देनी चाहिए जो ALLOW_ADMIN_USER_PASSWORD_AUTH
के साथ लॉगिन करने की अनुमति देता है। इसके अतिरिक्त, इस क्रिया को करने के लिए आपको अनुमतियों के साथ क्रेडेंशियल की आवश्यकता है cognito-idp:AdminInitiateAuth
और cognito-idp:AdminRespondToAuthChallenge
Last updated