एकीकरण गाइड
OAuth2 + PKCE के साथ चार चरणों में अपने उत्पाद में «Tutu से लॉगिन» जोड़ें।
एकीकरण के चार चरण
फ्रंटएंड लॉगिन शुरू करता है
@tutu/id-sdk के createTutuId({ baseUrl, clientId }) से इंस्टेंस बनाएँ और क्लिक पर idSdk.startLogin() कॉल करें। SDK एक PKCE जोड़ा बनाकर TutuId प्राधिकरण पेज पर रीडायरेक्ट करता है।
उपयोगकर्ता TutuId पर प्राधिकृत करता है
/oauth/authorize सहमति स्क्रीन पर उपयोगकर्ता «अनुमति दें» दबाता है (पहले से अधिकृत हो तो स्वतः छूट जाता है)। client_id और redirect_uri श्वेतसूची जाँचने के बाद TutuId एक प्राधिकरण कोड के साथ आपके /auth/callback पर लौटाता है।
कॉलबैक पेज code प्राप्त करता है
/auth/callback पर idSdk.completeCallback() कॉल कर { code, codeVerifier } पाएँ। ये दो मान अपने बैकएंड को दें; ब्राउज़र में सीधे token न बदलें।
बैकएंड token बदलता है → खाता बनाता है
आपका बैकएंड code + codeVerifier को access_token से बदलता है, /userinfo कॉल कर { sub, email, emailVerified, ... } पाता है, sub के आधार पर लोकल खाता मैप या बनाता है, फिर अपना सत्र जारी करता है।
★ खाता अधिग्रहण रक्षा (अवश्य पालन करें)
आपका बैकएंड केवल sub (खाता यूनिक ID) के आधार पर लोकल खाता जोड़ या बना सकता है। केवल जब emailVerified === true हो, तभी ईमेल से मौजूदा लोकल खाता जोड़ें; अन्यथा अलग खाता बनाएँ और ईमेल खाली छोड़ें।
क्यों: हमलावर पीड़ित के ईमेल से पहले ही Tutu खाता पंजीकृत कर सकता है; अपुष्ट ईमेल से विलय करना पीड़ित का लोकल खाता सौंप देने जैसा है। यह CVE-स्तर की लाल रेखा है।
SDK API संदर्भ
@tutu/id-sdk · पूर्णतः क्लाइंट-साइड, शून्य निर्भरता (Web Crypto + sessionStorage आवश्यक)।
createTutuId({ baseUrl, clientId, redirectUri? }) SDK इंस्टेंस बनाता है। redirectUri का डिफ़ॉल्ट ${location.origin}/auth/callback है, जो dev/prod के अनुसार अनुकूल होता है।
startLogin(scope?) PKCE जोड़ा बनाकर प्राधिकरण पेज पर रीडायरेक्ट करता है और «Tutu से लॉगिन» शुरू करता है।
trySilentLogin(scope?) साइलेंट लॉगिन: यदि केंद्रीय सत्र व पूर्व प्राधिकरण हो तो बिना रुकावट कोड बदलता है; अन्यथा तुरंत लॉग-आउट स्थिति पर लौट आता है (उपयोगकर्ता को बाधित किए बिना)।
completeCallback() कॉलबैक पेज पर परिणाम पार्स करता है: सफलता पर { code, codeVerifier }, विफलता/रद्द पर { error } लौटाता है।
logoutEverywhere(returnTo?) केंद्रीय सत्र लॉगआउट करता है, सूट के सभी उत्पादों को क्रमिक रूप से लॉगआउट करता है, फिर returnTo पर लौटता है।
पहले इसे क्रिया में देखना चाहते हैं?