अगर आपने Firebase Authentication with Identity Platform पर अपग्रेड किया है, तो अपने ऐप्लिकेशन में, समय के हिसाब से एक बार इस्तेमाल होने वाला पासवर्ड (टीओटीपी) मल्टी-फ़ैक्टर ऑथेंटिकेशन (एमएफ़ए) जोड़ा जा सकता है.
Firebase Authentication with Identity Platform की मदद से, टीओटीपी को एमएफ़ए के लिए अतिरिक्त फ़ैक्टर के तौर पर इस्तेमाल किया जा सकता है. इस सुविधा को चालू करने पर, आपके ऐप्लिकेशन में साइन इन करने की कोशिश करने वाले लोगों को टीओटीपी का अनुरोध दिखता है. इसे जनरेट करने के लिए, उन्हें ऐसे Authenticator ऐप्लिकेशन का इस्तेमाल करना होगा जो मान्य टीओटीपी कोड जनरेट कर सकता हो. जैसे, Google Authenticator.
शुरू करने से पहले
कम से कम एक ऐसी सेवा चालू करें जो एमएफ़ए की सुविधा देती हो. ध्यान दें कि यहां दिए गए इनके अलावा, सभी प्रोवाइडर के लिए एमएफ़ए की सुविधा उपलब्ध है:
- फ़ोन से पुष्टि करना
- पहचान छिपाकर पुष्टि करना
- कस्टम पुष्टि करने वाले टोकन
- Apple Game Center
पक्का करें कि आपका ऐप्लिकेशन, उपयोगकर्ता के ईमेल पतों की पुष्टि करता हो. एमएफ़ए के लिए, ईमेल पते की पुष्टि करना ज़रूरी है. इससे हैकर, ऐसे ईमेल पते से किसी सेवा के लिए रजिस्टर नहीं कर पाते हैं जिसका मालिकाना हक उनके पास नहीं है. साथ ही, वे पुष्टि करने का दूसरा तरीका जोड़कर, ईमेल पते के असली मालिक को खाते से लॉक नहीं कर पाते हैं.
अगर आपने अब तक ऐसा नहीं किया है, तो Firebase Android SDK इंस्टॉल करें.
TOTP MFA की सुविधा, सिर्फ़ Android SDK के v22.1.0 वर्शन और इसके बाद के वर्शन पर काम करती है.
टीओटीपी एमएफ़ए चालू करना
दूसरे फ़ैक्टर के तौर पर टीओटीपी चालू करने के लिए, Admin SDK का इस्तेमाल करें या प्रोजेक्ट कॉन्फ़िगरेशन REST एंडपॉइंट को कॉल करें.
Admin SDK का इस्तेमाल करने के लिए, यह तरीका अपनाएं:
अगर आपने पहले से ऐसा नहीं किया है, तो Firebase Admin Node.js SDK इंस्टॉल करें.
TOTP MFA की सुविधा, Firebase Admin Node.js SDK के 11.6.0 और इसके बाद के वर्शन पर ही काम करती है.
यह कमांड चलाएं:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { multiFactorConfig: { providerConfigs: [{ state: "ENABLED", totpProviderConfig: { adjacentIntervals: NUM_ADJ_INTERVALS } }] } })
इनकी जगह ये डालें:
NUM_ADJ_INTERVALS
: यह बताता है कि टीओटीपी स्वीकार करने के लिए, आस-पास के कितने टाइम-विंडो इंटरवल इस्तेमाल किए जा सकते हैं. इनकी संख्या शून्य से दस तक हो सकती है. डिफ़ॉल्ट रूप से, यह पांच पर सेट होता है.टीओटीपी इस तरह काम करते हैं कि जब दो पक्ष (प्रूवर और पुष्टि करने वाला) एक ही समय सीमा (आम तौर पर 30 सेकंड) में ओटीपी जनरेट करते हैं, तो वे एक ही पासवर्ड जनरेट करते हैं. हालांकि, पार्टियों के बीच समय के अंतर और जवाब देने में लगने वाले समय को ध्यान में रखते हुए, टीओटीपी सेवा को कॉन्फ़िगर किया जा सकता है, ताकि वह आस-पास की विंडो से मिले टीओटीपी को भी स्वीकार कर सके.
REST API का इस्तेमाल करके, टीओटीपी एमएफ़ए चालू करने के लिए, यह कमांड चलाएं:
curl -X PATCH "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=mfa" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
-d \
'{
"mfa": {
"providerConfigs": [{
"state": "ENABLED",
"totpProviderConfig": {
"adjacentIntervals": NUM_ADJ_INTERVALS
}
}]
}
}'
इनकी जगह ये डालें:
PROJECT_ID
: प्रोजेक्ट आईडी.NUM_ADJ_INTERVALS
: टाइम-विंडो इंटरवल की संख्या, जो शून्य से लेकर दस तक होती है. डिफ़ॉल्ट रूप से, यह पांच पर सेट होता है.टीओटीपी इस तरह काम करते हैं कि जब दो पक्ष (प्रूवर और पुष्टि करने वाला) एक ही समय सीमा (आम तौर पर 30 सेकंड) में ओटीपी जनरेट करते हैं, तो वे एक ही पासवर्ड जनरेट करते हैं. हालांकि, पार्टियों के बीच समय के अंतर और जवाब देने में लगने वाले समय को ध्यान में रखते हुए, टीओटीपी सेवा को कॉन्फ़िगर किया जा सकता है, ताकि वह आस-पास की विंडो से मिले टीओटीपी को भी स्वीकार कर सके.
पंजीकरण का पैटर्न चुनें
आपके पास यह चुनने का विकल्प होता है कि आपके ऐप्लिकेशन के लिए, बहु-फ़ैक्टर पुष्टि की ज़रूरत है या नहीं. साथ ही, यह भी तय किया जा सकता है कि उपयोगकर्ताओं को कब और कैसे रजिस्टर करना है. आम तौर पर, इस तरह के पैटर्न देखने को मिलते हैं:
रजिस्ट्रेशन के दौरान, उपयोगकर्ता के दूसरे फ़ैक्टर को रजिस्टर करें. अगर आपके ऐप्लिकेशन में सभी उपयोगकर्ताओं के लिए, कई चरणों में पुष्टि करने की सुविधा ज़रूरी है, तो इस तरीके का इस्तेमाल करें.
रजिस्ट्रेशन के दौरान, पुष्टि के दूसरे तरीके से रजिस्टर करने के लिए, स्किप करने का विकल्प दें. अगर आपको अपने ऐप्लिकेशन में कई चरणों में पुष्टि करने की सुविधा को बढ़ावा देना है, लेकिन इसे ज़रूरी नहीं बनाना है, तो इस तरीके का इस्तेमाल किया जा सकता है.
साइन-अप स्क्रीन के बजाय, उपयोगकर्ता के खाते या प्रोफ़ाइल मैनेजमेंट पेज से दूसरा फ़ैक्टर जोड़ने की सुविधा दें. इससे रजिस्ट्रेशन प्रोसेस के दौरान आने वाली समस्याएं कम हो जाती हैं. साथ ही, सुरक्षा के लिहाज़ से संवेदनशील उपयोगकर्ताओं के लिए, मल्टी-फ़ैक्टर ऑथेंटिकेशन की सुविधा उपलब्ध रहती है.
जब उपयोगकर्ता को ज़्यादा सुरक्षा वाली सुविधाओं को ऐक्सेस करना हो, तब पुष्टि करने के दूसरे तरीके को धीरे-धीरे जोड़ने की ज़रूरत होती है.
उपयोगकर्ताओं को टीओटीपी एमएफ़ए में रजिस्टर करना
अपने ऐप्लिकेशन के लिए, दूसरे फ़ैक्टर के तौर पर टीओटीपी एमएफ़ए चालू करने के बाद, क्लाइंट-साइड लॉजिक लागू करें, ताकि उपयोगकर्ताओं को टीओटीपी एमएफ़ए में रजिस्टर किया जा सके:
उपयोगकर्ता की फिर से पुष्टि करें.
भरोसेमंद उपयोगकर्ता के लिए टीओटीपी सीक्रेट जनरेट करें:
// Generate a TOTP secret. Firebase.auth.currentUser.multiFactor.session .addOnSuccessListener { multiFactorSession -> TotpMultiFactorGenerator.generateSecret(multiFactorSession) .addOnSuccessListener { totpSecret -> // Display the secret to the user and prompt them to // enter it into their authenticator app. (See the next // step.) } }
उपयोगकर्ता को सीक्रेट दिखाएं और उसे अपने पुष्टि करने वाले ऐप्लिकेशन में इसे डालने के लिए कहें:
// Display this key: val secret = totpSecret.sharedSecretKey
सीक्रेट कुंजी दिखाने के अलावा, इसे डिवाइस के डिफ़ॉल्ट ऑथेंटिकेटर ऐप्लिकेशन में अपने-आप जोड़ने की कोशिश की जा सकती है. इसके लिए, Google Authenticator के साथ काम करने वाला कुंजी यूआरआई जनरेट करें और इसे
openInOtpApp()
को पास करें:val qrCodeUri = totpSecret.generateQrCodeUrl( currentUser.email ?: "default account", "Your App Name") totpSecret.openInOtpApp(qrCodeUri)
जब उपयोगकर्ता अपने सीक्रेट को पुष्टि करने वाले ऐप्लिकेशन में जोड़ लेता है, तब यह टीओटीपी जनरेट करना शुरू कर देगा.
उपयोगकर्ता को पुष्टि करने वाले ऐप्लिकेशन में दिखने वाला टीओटीपी टाइप करने के लिए कहें. साथ ही, इसका इस्तेमाल करके एमएफ़ए के लिए रजिस्टर करने की प्रोसेस पूरी करें:
// Ask the user for a verification code from the authenticator app. val verificationCode = // Code from user input. // Finalize the enrollment. val multiFactorAssertion = TotpMultiFactorGenerator .getAssertionForEnrollment(totpSecret, verificationCode) Firebase.auth.currentUser.multiFactor.enroll(multiFactorAssertion, "TOTP") .addOnSuccessListener { // Enrollment complete. }
उपयोगकर्ताओं को दूसरे फ़ैक्टर की मदद से साइन इन करना
टीओटीपी एमएफ़ए का इस्तेमाल करके उपयोगकर्ताओं को साइन इन करने के लिए, इस कोड का इस्तेमाल करें:
signInWith
में से किसी एक तरीके का इस्तेमाल करके कॉल करें. ऐसा तब भी किया जाता है, जब आपने MFA का इस्तेमाल नहीं किया होता. (उदाहरण के लिए,signInWithEmailAndPassword()
.) अगर इस तरीके सेFirebaseAuthMultiFactorException
मिलता है, तो अपने ऐप्लिकेशन का एमएफ़ए फ़्लो शुरू करें.Firebase.auth.signInWithEmailAndPassword(email, password) .addOnSuccessListener { result -> // If the user is not enrolled with a second factor and provided valid // credentials, sign-in succeeds. // (If your app requires MFA, this could be considered an error // condition, which you would resolve by forcing the user to enroll a // second factor.) // ... } .addOnFailureListener { exception -> when (exception) { is FirebaseAuthMultiFactorException -> { // Initiate your second factor sign-in flow. (See next step.) // ... } } }
आपके ऐप्लिकेशन में, एमएफ़ए फ़्लो के तहत उपयोगकर्ता को सबसे पहले दूसरा फ़ैक्टर चुनने के लिए कहा जाना चाहिए.
hints
इंस्टेंस कीMultiFactorResolver
प्रॉपर्टी की जांच करके, पुष्टि के लिए इस्तेमाल किए जा सकने वाले दूसरे तरीकों की सूची देखी जा सकती है:val enrolledFactors = exception.resolver.hints.map { it.displayName }
अगर उपयोगकर्ता टीओटीपी का इस्तेमाल करना चाहता है, तो उसे पुष्टि करने वाले ऐप्लिकेशन पर दिखने वाला टीओटीपी टाइप करने के लिए कहें. इसके बाद, इसका इस्तेमाल करके साइन इन करें:
when (exception.resolver.hints[selectedIndex].factorId) { TotpMultiFactorGenerator.FACTOR_ID -> { val otpFromAuthenticator = // OTP typed by the user. val assertion = TotpMultiFactorGenerator.getAssertionForSignIn( exception.resolver.hints[selectedIndex].uid, otpFromAuthenticator ) exception.resolver.resolveSignIn(assertion) .addOnSuccessListener { result -> // Successfully signed in! } .addOnFailureListener { resolveError -> // Invalid or expired OTP. } } PhoneMultiFactorGenerator.FACTOR_ID -> { // Handle SMS second factor. } }
टीओटीपी एमएफ़ए की सुविधा से ऑप्ट आउट करना
इस सेक्शन में, टीओटीपी एमएफ़ए से उपयोगकर्ता के ऑप्ट आउट करने की प्रोसेस के बारे में बताया गया है.
अगर किसी उपयोगकर्ता ने पुष्टि करने के कई तरीकों के लिए साइन अप किया है और वह हाल ही में चालू किए गए विकल्प से ऑप्ट आउट करता है, तो उसे auth/user-token-expired
मिलता है और वह लॉग आउट हो जाता है. उपयोगकर्ता को फिर से साइन इन करना होगा और अपने मौजूदा क्रेडेंशियल की पुष्टि करनी होगी. जैसे, ईमेल पता और पासवर्ड.
उपयोगकर्ता को ऑप्ट आउट करने, गड़बड़ी ठीक करने, और फिर से पुष्टि करने की प्रोसेस को ट्रिगर करने के लिए, इस कोड का इस्तेमाल करें:
Firebase.auth.currentUser.multiFactor.unenroll(mfaEnrollmentId)
.addOnSuccessListener {
// Second factor unenrolled.
}
.addOnFailureListener { exception ->
when (exception) {
is FirebaseAuthInvalidUserException -> {
// Second factor unenrolled. If the user was signed out, re-authenticate
// them.
// For example, if they signed in with a password, prompt them to
// provide it again, then call `reauthenticateWithCredential()` as shown
// below.
val credential = EmailAuthProvider.getCredential(email, password)
currentUser.reauthenticate(credential)
.addOnSuccessListener {
// Success!
}
.addOnFailureListener {
// Bad email address and password combination.
}
}
}
}
आगे क्या करना है
- Admin SDK की मदद से, प्रोग्राम के हिसाब से मल्टी-फ़ैक्टर ऑथेंटिकेशन का इस्तेमाल करने वाले लोगों को मैनेज करें.