Signal API की मदद से, अपने सर्वर पर क्रेडेंशियल के साथ पासकी को एक जैसा रखना

पब्लिश करने की तारीख: 12 नवंबर, 2024

WebAuthn Signal API की मदद से, भरोसेमंद पक्ष, कनेक्ट की गई पासकी सेवा देने वाली कंपनियों को मौजूदा क्रेडेंशियल का सिग्नल भेज सकते हैं. इसकी मदद से, पासकी की सुविधा देने वाली कंपनी अपने स्टोरेज से अमान्य या रद्द की गई पासकी को अपडेट या हटा सकती है, ताकि उन्हें उपयोगकर्ताओं को न दिखाया जाए.

इनके साथ काम करता है

डेस्कटॉप पर Chrome 132 से, Signal API काम करता है. Google Password Manager, सिग्नल को दिखाने वाली पासकी को अपडेट कर सकता है. Chrome एक्सटेंशन पर आधारित पासकी की सेवा देने वाली कंपनियों के लिए, यह तय करना उनका काम है कि वे सिग्नल दिखाएंगी या नहीं.

Android पर Chrome के लिए, यह सुविधा बाद में उपलब्ध होगी.

Safari पर यह सुविधा काम करती है, लेकिन फ़िलहाल इसे लागू नहीं किया गया है. Firefox ने अब तक अपनी राय शेयर नहीं की है.

बैकग्राउंड

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

हालांकि, कुछ मामलों में पासकी प्रोवाइडर की पासकी सूची और सर्वर की क्रेडेंशियल सूची के बीच अंतर होने की वजह से, भ्रम की स्थिति पैदा हो सकती है.

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

दूसरा मामला तब होता है, जब कोई उपयोगकर्ता सर्वर पर अपना उपयोगकर्ता नाम या डिसप्ले नेम अपडेट करता है. जब उपयोगकर्ता अगली बार साइन इन करने की कोशिश करता है, तो पासकी प्रोवाइडर में पासकी, सर्वर पर अपडेट होने के बावजूद पुराना उपयोगकर्ता नाम और डिसप्ले नेम दिखाता रहता है. आम तौर पर, दोनों डिवाइसों पर एक ही डेटा होना चाहिए.

Signal API

Signal API, WebAuthn API है. यह आरपी को पासकी देने वाली कंपनी में हुए बदलावों के बारे में सिग्नल भेजने की अनुमति देकर, इन उलझनों को हल करता है. इसके तीन तरीके हैं:

क्रेडेंशियल मौजूद न होने की जानकारी

const credential = await navigator.credentials.get({ ... });
const payload = credential.toJSON();

const result = await fetch('/login', { ... });

// Detect authentication failure due to lack of the credential
if (result.status === 404) {
  // Feature detection
  if (PublicKeyCredential.signalUnknownCredential) {
    await PublicKeyCredential.signalUnknownCredential({
      rpId: "example.com",
      credentialId: "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA" // base64url encoded credential ID
    });
  } else {
    // Encourage the user to delete the passkey from the password manager nevertheless.
    ...
  }
}

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

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

Chrome पर Google Password Manager से पासकी मिटाने पर दिखने वाला डायलॉग.
Chrome पर Google Password Manager से पासकी मिटाने पर दिखने वाला डायलॉग.

सेव किए गए क्रेडेंशियल की सूची दिखाना

// After a user deletes a passkey or a user is signed in.

// Feature detection
if (PublicKeyCredential.signalAllAcceptedCredentials) {
  await PublicKeyCredential.signalAllAcceptedCredentials({
    rpId: "example.com",
    userId: "M2YPl-KGnA8", // base64url encoded user ID
    allAcceptedCredentialIds: [ // A list of base64url encoded credential IDs
      "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA",
      ...
    ]
  });
}

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

इस एपीआई को आरपी पर जब कोई उपयोगकर्ता पासकी मिटाता है और हर बार साइन इन करने पर ट्रिगर किया जाना चाहिए. इससे पासकी की सेवा देने वाली कंपनी, पासकी की सिंक की गई सूची बनाए रख सकती है.

Signal पर अपडेट किया गया उपयोगकर्ता नाम और डिसप्ले नेम

// After a user updated their username and/or display name
// or a user is signed in.

// Feature detection
if (PublicKeyCredential.signalCurrentUserDetails) {
  await PublicKeyCredential.signalCurrentUserDetails({
    rpId: "example.com",
    userId: "M2YPl-KGnA8", // base64url encoded user ID
    name: "a.new.email.address@example.com", // username
    displayName: "J. Doe"
  });
} else {
}

आरपी, PublicKeyCredential.signalCurrentUserDetails() को आरपी आईडी, उपयोगकर्ता आईडी, उपयोगकर्ता नाम, और डिसप्ले नेम के साथ कॉल करके, पासकी देने वाली कंपनी को उपयोगकर्ता की अपडेट की गई जानकारी दे सकता है. पासकी देने वाली कंपनी के पास यह तय करने का विकल्प होता है कि इस सिग्नल को कैसे मैनेज किया जाए. हालांकि, उपयोगकर्ता के पास जो पासकी होती हैं उन्हें उपयोगकर्ता की नई जानकारी के साथ अपडेट किया जाना चाहिए.

इस एपीआई को जब उपयोगकर्ता का उपयोगकर्ता नाम या डिसप्ले नेम अपडेट किया जाता है, तब और हर बार साइन इन करने पर ट्रिगर किया जा सकता है. इससे पासकी देने वाली कंपनी, इस जानकारी को सर्वर के साथ सिंक कर सकती है.

Chrome पर Google Password Manager में पासकी का मेटाडेटा अपडेट होने पर दिखने वाला डायलॉग.
Chrome पर Google Password Manager में पासकी का मेटाडेटा अपडेट होने पर दिखने वाला डायलॉग.

खास जानकारी

Signal API की मदद से, पासकी का बेहतर अनुभव बनाया जा सकता है. इससे, साइन-इन करने में अचानक आने वाली समस्याओं से बचा जा सकता है. Signal API की मदद से, भरोसेमंद पक्ष मौजूदा क्रेडेंशियल और उनके मेटाडेटा की सूची को सिग्नल कर सकते हैं. इससे वे पासकी देने वाली कंपनी के पास मौजूद पासकी को सिंक करके रख सकते हैं.

पासकी के बारे में ज़्यादा जानने के लिए, पासकी की मदद से पासवर्ड के बिना लॉगिन करना लेख पढ़ें.