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

पब्लिश करने की तारीख: 12 नवंबर, 2024, पिछली बार अपडेट करने की तारीख: 29 नवंबर, 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() को कॉल करके, आरपी पासकी प्रोवाइडर को यह सूचना दे सकता है कि बताया गया क्रेडेंशियल हटा दिया गया है या मौजूद नहीं है. पासकी की सुविधा देने वाली कंपनी यह तय करती है कि इस सिग्नल का इस्तेमाल कैसे किया जाए. हालांकि, इससे जुड़ी पासकी को हटा दिया जाना चाहिए, ताकि उपयोगकर्ता पासकी से साइन इन न कर पाए. ऐसा इसलिए, क्योंकि इससे जुड़ी क्रेडेंशियल मौजूद नहीं है.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

इस एपीआई को तब शुरू किया जा सकता है, जब क्रेडेंशियल मौजूद न होने की वजह से, पासकी का इस्तेमाल करके साइन इन करने की सुविधा काम न कर रही हो. इस तरह, आरपी उपयोगकर्ता को ऐसी पासकी से साइन इन करने की कोशिश करने से रोक सकता है जिससे जुड़ा कोई क्रेडेंशियल नहीं है. 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() को कॉल करके, आरपी, पासकी की सुविधा देने वाली कंपनी को अपने स्टोरेज में मौजूद बाकी क्रेडेंशियल के बारे में बता सकता है. पासकी उपलब्ध कराने वाली कंपनी यह तय करती है कि इस सिग्नल का इस्तेमाल कैसे किया जाए. हालांकि, इस सूची से मेल न खाने वाली पासकी को हटा दिया जाता है, ताकि उपयोगकर्ता को साइन इन करने के लिए ऐसी पासकी न दिखें जिनके लिए क्रेडेंशियल मौजूद नहीं है.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

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

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

// 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() को कॉल करके, आरपी पासकी उपलब्ध कराने वाली कंपनी को उपयोगकर्ता की अपडेट की गई जानकारी के बारे में बता सकता है. पासकी की सुविधा देने वाली कंपनी यह तय करती है कि इस सिग्नल को कैसे मैनेज किया जाए. हालांकि, उम्मीद की जाती है कि उपयोगकर्ता के पास मौजूद पासकी को, उपयोगकर्ता की नई जानकारी के साथ अपडेट किया जाएगा.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

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

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

खास जानकारी

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

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