FedCM के बारे में अपडेट: डोमेन हिंट एपीआई

Chrome 123 में, Federated Credential Management API (FedCM) के साथ-साथ डोमेन के बारे में अहम जानकारी का इस्तेमाल किया जा सकता है. डोमेन हिंट एपीआई की मदद से, डेवलपर उपयोगकर्ताओं को बेहतर अनुभव दे सकते हैं. इसके लिए, वे सिर्फ़ उस डोमेन के फ़ेडरेटेड लॉगिन खाते दिखाते हैं जिसे वे स्वीकार करते हैं.

Domain Hint API

FedCM का इस्तेमाल करके, किसी उपयोगकर्ता के लिए किसी भरोसेमंद पक्ष (आरपी, किसी वेबसाइट को रेफ़र करना) में लॉगिन करना आसान बनाया जा सकता है. इसके लिए, आइडेंटिटी प्रोवाइडर (आईडीपी) से मिली खाते की जानकारी का इस्तेमाल किया जाता है. हालांकि, कुछ मामलों में आरपी को पहले से पता होता है कि सिर्फ़ किसी खास डोमेन से जुड़े खातों को साइट पर लॉगिन करने की अनुमति है. यह आम तौर पर, एंटरप्राइज़ के उन मामलों में होता है जहां ऐक्सेस की जा रही साइट, किसी कॉर्पोरेट डोमेन तक ही सीमित होती है. उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, FedCM API की मदद से आरपी को सिर्फ़ वे खाते दिखाए जाते हैं जिनका इस्तेमाल आरपी में लॉगिन करने के लिए किया जा सकता है. इससे, ऐसे मामलों से बचा जा सकता है जहां कोई उपयोगकर्ता, कॉर्पोरेट डोमेन से बाहर के खाते का इस्तेमाल करके आरपी में लॉगिन करने की कोशिश करता है. बाद में, उसे गड़बड़ी का मैसेज दिखता है या लॉगिन न होने पर कोई मैसेज नहीं दिखता. ऐसा इसलिए होता है, क्योंकि सही तरह के खाते का इस्तेमाल नहीं किया गया था.

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

खातों की सूची वाले एंडपॉइंट से मिलने वाले JSON रिस्पॉन्स का उदाहरण, इस तरह दिखेगा:

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

खातों को फ़िल्टर करने के लिए, आरपी domainHint प्रॉपर्टी के साथ navigator.credentials.get() को कॉल कर सकता है. उदाहरण के लिए, मान लें कि कोई उपयोगकर्ता corp-partner.example पर जाता है और corp.example के खाते से साइन इन करता है. साइट, एपीआई को इस तरह से शुरू करेगी:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

सर्वर साइड फ़िल्टरिंग के लिए, domainHint वैल्यू को खातों की सूची के एंडपॉइंट पर नहीं भेजा जाता, क्योंकि यह IdP के लिए फ़िंगरप्रिंट वेक्टर हो सकता है. इसके बजाय, Chrome सामान्य तौर पर FedCM अनुरोध करता है और ऐसे खातों को फ़िल्टर कर देता है जो navigator.credentials.get() कॉल से तय की गई domainHint वैल्यू से मेल नहीं खाते. इसके बाद, Chrome उपयोगकर्ता को नए खातों की सूची के साथ FedCM डायलॉग दिखाता है. यह तरीका, लॉगिन करने के लिए दिए गए संकेत वाले एपीआई से मिलता-जुलता है. हालांकि, ये दोनों एपीआई अलग-अलग सवालों के जवाब देते हैं. लॉगिन हिंट एपीआई का मकसद, "मेरे पसंदीदा उपयोगकर्ता का आइडेंटिफ़ायर कौनसा है?" का जवाब देना है. वहीं, डोमेन हिंट का मकसद, "यह खाता किस कॉर्पोरेशन या सर्वर का है?" का जवाब देना है.

domainHint: "any" का इस्तेमाल करने पर, Chrome ऐसे खातों को फ़िल्टर कर देता है जिनमें कोई डोमेन नहीं है. इसका मतलब है कि domain_hints को पास नहीं किया गया है या वह खाली है. उदाहरण के लिए, इससे ऐसे इस्तेमाल के उदाहरणों की अनुमति मिलती है जहां आरपी, साइनअप की प्रोसेस में सिर्फ़ मैनेज किए जा रहे खातों को अनुमति देता है.

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

जब कोई भी खाता, domainHint से मेल न खाता हो, तब लॉगिन करने के लिए प्रॉम्प्ट का उदाहरण.
domainHint से मैच करने वाला कोई खाता न होने पर, लॉगिन प्रॉम्प्ट का उदाहरण.