उपयोगकर्ता की पुष्टि से जुड़ी पूरी जानकारी

इस दस्तावेज़ में बताया गया है कि WebAuthn में userVerification क्या है. साथ ही, पासकी बनाने या पुष्टि करने के दौरान userVerification तय किए जाने पर, ब्राउज़र के व्यवहार के बारे में भी बताया गया है.

WebAuthn में "उपयोगकर्ता की पुष्टि" क्या है?

पासकी, सार्वजनिक पासकोड क्रिप्टोग्राफ़ी पर आधारित होती हैं. पासकी बनाने पर, सार्वजनिक और निजी पासकी का एक जोड़ा जनरेट होता है. निजी पासकी को पासकी की सुविधा देने वाली कंपनी सेव करती है. वहीं, सार्वजनिक पासकी को भरोसा करने वाली पार्टी (आरपी) के सर्वर को वापस भेज दिया जाता है, ताकि उसे सेव किया जा सके. सर्वर, उपयोगकर्ता की पुष्टि कर सकता है. इसके लिए, वह पेयर की गई सार्वजनिक कुंजी का इस्तेमाल करके, उसी पासकी से किए गए हस्ताक्षर की पुष्टि करता है. सार्वजनिक पासकी क्रेडेंशियल पर मौजूद "उपयोगकर्ता मौजूद है" (यूपी) फ़्लैग से यह साबित होता है कि पुष्टि के दौरान किसी व्यक्ति ने डिवाइस के साथ इंटरैक्ट किया था.

उपयोगकर्ता की पुष्टि करना, सुरक्षा की एक वैकल्पिक लेयर है. इससे यह पुष्टि की जाती है कि पुष्टि के दौरान सही व्यक्ति मौजूद था. सिर्फ़ कोई व्यक्ति नहीं, जैसा कि उपयोगकर्ता की मौजूदगी से पता चलता है. स्मार्टफ़ोन पर, आम तौर पर स्क्रीन लॉक करने की सुविधा का इस्तेमाल करके ऐसा किया जाता है. यह सुविधा बायोमेट्रिक या पिन या पासवर्ड के तौर पर उपलब्ध होती है. उपयोगकर्ता की पुष्टि की गई है या नहीं, इसकी जानकारी "UV" फ़्लैग में दी जाती है. यह फ़्लैग, पासकी रजिस्टर करने और पुष्टि करने के दौरान, पुष्टि करने वाले व्यक्ति के डेटा में दिखता है

macOS पर iCloud Keychain में उपयोगकर्ता की पुष्टि करने वाले डायलॉग का स्क्रीनशॉट. डायलॉग बॉक्स में, उपयोगकर्ता को Touch ID का इस्तेमाल करके साइन इन करने के लिए कहा जाता है. इसमें, पुष्टि करने का अनुरोध करने वाले ऑरिजिन के साथ-साथ उपयोगकर्ता नाम भी दिखता है. डायलॉग बॉक्स में सबसे ऊपर दाईं ओर, 'रद्द करें' लेबल वाला बटन होता है.
macOS पर iCloud Keychain में उपयोगकर्ता की पुष्टि करने वाला डायलॉग.
Chrome for Android पर, उपयोगकर्ता की पुष्टि करने वाले डायलॉग का स्क्रीनशॉट. डायलॉग में, उपयोगकर्ता को चेहरे की पहचान करने या फ़िंगरप्रिंट की पहचान करने की सुविधा का इस्तेमाल करके, अपनी पहचान की पुष्टि करने के लिए कहा जाता है. साथ ही, इसमें पुष्टि का अनुरोध करने वाले ऑरिजिन की जानकारी दिखती है. सबसे नीचे बाईं ओर, पिन का इस्तेमाल करके पुष्टि करने का विकल्प होता है.
Android Chrome पर उपयोगकर्ता की पुष्टि करने वाला डायलॉग.

सर्वर पर UP और UV की पुष्टि कैसे की जाती है

उपयोगकर्ता की मौजूदगी (यूपी) और उपयोगकर्ता की पुष्टि (यूवी) वाले बूलियन फ़्लैग, पुष्टि करने वाले व्यक्ति के डेटा फ़ील्ड में सर्वर को भेजे जाते हैं. पुष्टि करने की प्रोसेस के दौरान, पुष्टि करने वाले डेटा फ़ील्ड के कॉन्टेंट की पुष्टि की जा सकती है. इसके लिए, सेव की गई सार्वजनिक कुंजी का इस्तेमाल करके हस्ताक्षर की पुष्टि की जाती है. जब तक हस्ताक्षर मान्य है, तब तक सर्वर फ़्लैग को असली मान सकता है.

पुष्टि करने के लिए इस्तेमाल किए जाने वाले डेटा स्ट्रक्चर की इमेज. बाईं से दाईं ओर, डेटा स्ट्रक्चर के हर सेक्शन में 'RP ID HASH' (32 बाइट), 'FLAGS' (1 बाइट), 'COUNTER' (4 बाइट, बिग-एंडियन uint32), 'ATTESTE CRED. DATA' (अगर मौजूद है, तो वैरिएबल की लंबाई), और 'EXTENSIONS' (अगर मौजूद है, तो वैरिएबल की लंबाई (CBOR)). 'FLAGS' सेक्शन को बड़ा करके दिखाया गया है, ताकि संभावित फ़्लैग की सूची दिख सके. इन्हें बाईं से दाईं ओर लेबल किया गया है: 'ED', 'AT', '0', 'BS', 'BE', 'UV', '0', और 'UP'.
सार्वजनिक पासकोड क्रेडेंशियल में Authenticator के डेटा फ़ील्ड.

पासकी के रजिस्ट्रेशन और पुष्टि के दौरान, सर्वर को यह जांच करनी चाहिए कि यूपी फ़्लैग true है या false. साथ ही, यह भी जांच करनी चाहिए कि यूवी फ़्लैग true है या false. यह जांच, ज़रूरत के हिसाब से की जानी चाहिए.

userVerification पैरामीटर तय करना

WebAuthn स्पेसिफ़िकेशन के मुताबिक, आरपी, क्रेडेंशियल बनाने और पुष्टि करने, दोनों के लिए userVerification पैरामीटर के साथ उपयोगकर्ता की पुष्टि करने का अनुरोध कर सकता है. यह 'preferred', 'required' या 'discouraged' को स्वीकार करता है. इनका मतलब यह है:

  • 'preferred' (डिफ़ॉल्ट): डिवाइस पर उपयोगकर्ता की पुष्टि करने के तरीके का इस्तेमाल करना बेहतर होता है. हालांकि, अगर यह उपलब्ध नहीं है, तो इसे छोड़ा जा सकता है. अगर उपयोगकर्ता की पुष्टि की गई है, तो जवाब के क्रेडेंशियल में यूवी फ़्लैग की वैल्यू true होती है. अगर यूवी की पुष्टि नहीं की गई है, तो वैल्यू false होती है.
  • 'required': डिवाइस पर उपलब्ध उपयोगकर्ता की पुष्टि करने के तरीके का इस्तेमाल करना ज़रूरी है. अगर ऐसा कोई भी उपशीर्षक उपलब्ध नहीं है, तो अनुरोध पूरा नहीं किया जा सकेगा. इसका मतलब है कि रिस्पॉन्स क्रेडेंशियल हमेशा true पर सेट किए गए यूवी फ़्लैग के साथ दिखता है.
  • 'discouraged': उपयोगकर्ता की पुष्टि करने के तरीके का इस्तेमाल न करने का सुझाव दिया जाता है. हालांकि, डिवाइस के आधार पर उपयोगकर्ता की पुष्टि की जा सकती है. साथ ही, यूवी फ़्लैग में true या false शामिल हो सकता है.

पासकी बनाने के लिए सैंपल कोड:

const publicKeyCredentialCreationOptions = {
  // ...
  authenticatorSelection: {
    authenticatorAttachment: 'platform',
    residentKey: 'required',
    requireResidentKey: true,
    userVerification: 'preferred'
  }
};

const credential = await navigator.credentials.create({
  publicKey: publicKeyCredentialCreationOptions
});

पासकी की मदद से पुष्टि करने के लिए सैंपल कोड:

const publicKeyCredentialRequestOptions = {
  challenge: /* Omitted challenge data... */,
  rpId: 'example.com',
  userVerification: 'preferred'
};

const credential = await navigator.credentials.get({
  publicKey: publicKeyCredentialRequestOptions
});

आपको userVerification के लिए कौनसा विकल्प चुनना चाहिए?

आपको userVerification की कौनसी वैल्यू इस्तेमाल करनी चाहिए, यह आपके ऐप्लिकेशन की ज़रूरी शर्तों के साथ-साथ, उपयोगकर्ता अनुभव की ज़रूरतों पर निर्भर करता है.

userVerification='preferred' का इस्तेमाल कब करें

अगर आपको सुरक्षा के बजाय उपयोगकर्ता अनुभव को प्राथमिकता देनी है, तो userVerification='preferred' का इस्तेमाल करें.

कुछ ऐसे एनवायरमेंट होते हैं जहां उपयोगकर्ता की पुष्टि करना, सुरक्षा से ज़्यादा मुश्किल होता है. उदाहरण के लिए, macOS पर Touch ID की सुविधा उपलब्ध नहीं है. ऐसा इसलिए है, क्योंकि डिवाइस पर यह सुविधा काम नहीं करती, इसे बंद कर दिया गया है या डिवाइस क्लैमशेल मोड में है. ऐसे में, उपयोगकर्ता को सिस्टम का पासवर्ड डालने के लिए कहा जाता है. इससे उपयोगकर्ता को परेशानी हो सकती है और वह पुष्टि करने की प्रोसेस को बीच में ही छोड़ सकता है. अगर आपके लिए बिना किसी रुकावट के पेमेंट करना ज़्यादा ज़रूरी है, तो userVerification='preferred' का इस्तेमाल करें.

macOS पर पासकी के डायलॉग का स्क्रीनशॉट. यह तब दिखता है, जब Touch ID उपलब्ध नहीं होता. डायलॉग बॉक्स में, पुष्टि करने का अनुरोध करने वाले ऑरिजिन और उपयोगकर्ता नाम जैसी जानकारी होती है. डायलॉग बॉक्स में सबसे ऊपर दाईं ओर, 'रद्द करें' लेबल वाला बटन होता है.
जब Touch ID उपलब्ध नहीं होता है, तब macOS पर पासकी का डायलॉग दिखता है.

userVerification='preferred' के साथ, अगर उपयोगकर्ता की पुष्टि हो जाती है, तो यूवी फ़्लैग true होता है. अगर उपयोगकर्ता की पुष्टि नहीं होती है, तो यूवी फ़्लैग false होता है. उदाहरण के लिए, macOS पर Touch ID उपलब्ध नहीं है. इसलिए, यह उपयोगकर्ता से पहचान की पुष्टि करने की प्रोसेस को छोड़ने के लिए, किसी बटन पर क्लिक करने के लिए कहता है. साथ ही, सार्वजनिक पासकोड क्रेडेंशियल में false यूवी फ़्लैग शामिल होता है.

इसके बाद, यूवी फ़्लैग को जोखिम विश्लेषण में सिग्नल के तौर पर इस्तेमाल किया जा सकता है. अगर साइन इन करने की कोशिश अन्य वजहों से जोखिम भरी लगती है, तो उपयोगकर्ता को साइन इन करने के लिए पुष्टि के अतिरिक्त विकल्प दिए जा सकते हैं. ऐसा तब किया जा सकता है, जब उपयोगकर्ता की पुष्टि न की गई हो.

userVerification='required' का इस्तेमाल कब करें

अगर आपको लगता है कि यूपी और यूवी, दोनों का इस्तेमाल करना ज़रूरी है, तो userVerification='required' का इस्तेमाल करें.

इस विकल्प का एक नुकसान यह है कि उपयोगकर्ता को साइन इन करते समय ज़्यादा परेशानी हो सकती है. उदाहरण के लिए, macOS पर Touch ID की सुविधा उपलब्ध नहीं है. इसलिए, उपयोगकर्ता को अपने सिस्टम का पासवर्ड डालने के लिए कहा जाता है.

userVerification='required' की मदद से, यह पक्का किया जा सकता है कि डिवाइस पर उपयोगकर्ता की पहचान की पुष्टि की गई हो. पक्का करें कि सर्वर यह पुष्टि करे कि यूवी फ़्लैग true है.

नतीजा

उपयोगकर्ता की पुष्टि करने की सुविधा का इस्तेमाल करके, पासकी पर भरोसा करने वाली पार्टियां यह अनुमान लगा सकती हैं कि डिवाइस का मालिक साइन इन करेगा या नहीं. यह उनकी पसंद पर निर्भर करता है कि उपयोगकर्ता की पुष्टि करना ज़रूरी है या नहीं. यह इस बात पर भी निर्भर करता है कि फ़ॉलबैक साइन-इन मैकेनिज़्म, उपयोगकर्ता फ़्लो पर कितना असर डालता है. पक्का करें कि सर्वर, पासकी का इस्तेमाल करके उपयोगकर्ता की पुष्टि करने के लिए, UP फ़्लैग और UV फ़्लैग की जांच करता हो.