फ़ेडरेटेड क्रेडेंशियल मैनेजमेंट एपीआई की डेवलपर गाइड

निजता बनाए रखने वाले आइडेंटिटी फ़ेडरेशन के लिए FedCM इस्तेमाल करने का तरीका जानें.

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

FedCM को इस्तेमाल के उदाहरणों, यूज़र फ़्लो, और एपीआई रोडमैप के बारे में ज़्यादा जानने के लिए, FedCM API के बारे में जानकारी.

FedCM डेवलपमेंट एनवायरमेंट

आपको Chrome में, आईडीपी (IdP) और आरपी, दोनों पर सुरक्षित कॉन्टेक्स्ट (एचटीटीपीएस या लोकलहोस्ट) की ज़रूरत होगी का इस्तेमाल करें.

Android पर Chrome पर डीबग कोड

अपने FedCM कोड को डीबग करने के लिए, सर्वर को स्थानीय तौर पर सेट अप करें और चलाएं. आप इस सर्वर को ऐक्सेस करें एक Android डिवाइस पर Chrome में, जिसे पोर्ट वाली यूएसबी केबल का इस्तेमाल करके कनेक्ट किया गया है फ़ॉरवर्डिंग.

डेस्कटॉप पर DevTools का इस्तेमाल करके, Android पर Chrome को डीबग किया जा सकता है. इसके लिए, यहां दिए गए निर्देशों का पालन करें: रिमोट डीबग Android पर निर्देश डिवाइस में बदल सकते हैं.

Chrome पर तीसरे पक्ष की कुकी ब्लॉक करें

Chrome को कॉन्फ़िगर करके, तीसरे पक्ष की कुकी के फ़ेज़-आउट को सिम्युलेट करें. ऐसा करने के लिए, Chrome को उन्हें ब्लॉक करने के लिए कॉन्फ़िगर करें
Chrome को ब्लॉक करने के लिए कॉन्फ़िगर करके, तीसरे पक्ष की कुकी के फ़ेज़-आउट को सिम्युलेट करें

Chrome पर तीसरे पक्ष की कुकी के बिना, FedCM के काम करने के तरीके की जांच की जा सकती है लागू किया गया.

तीसरे पक्ष की कुकी को ब्लॉक करने के लिए, गुप्त मोड का इस्तेमाल करें मोड या "ब्लॉक करें" तीसरे पक्ष की कुकी" अपने डेस्कटॉप की सेटिंग में, chrome://settings/cookies पर या इस पर सेट करें मोबाइल के लिए सेटिंग > साइट की सेटिंग > कुकी.

FedCM API का इस्तेमाल करना

आप एक लोकप्रिय फ़ाइल बनाकर FedCM के साथ इंटिग्रेट करते हैं, खातों के लिए, कॉन्फ़िगरेशन फ़ाइल और एंडपॉइंट सूची, ज़ायका जारी करना और क्लाइंट मेटाडेटा का इस्तेमाल करना ज़रूरी नहीं है.

इसके बाद, FedCM को JavaScript एपीआई के बारे में जानकारी मिलती है, जिनका इस्तेमाल आरपी, साइन इन करने के लिए कर सकता है आईडीपी (IdP) से साइन इन करें.

लोकप्रिय फ़ाइल बनाना

ताकि ट्रैकर, API, तो एक लोकप्रिय फ़ाइल इसके /.well-known/web-identity से सेवा ली गई eTLD+1 आईडीपी.

उदाहरण के लिए, अगर आईडीपी (IdP) एंडपॉइंट https://accounts.idp.example/, उन्हें https://idp.example/.well-known/web-identity और IdP वाला कॉन्फ़िगरेशन फ़ाइल में उपलब्ध है. यहां फ़ाइल के कॉन्टेंट का एक उदाहरण दिया गया है:

{
  "provider_urls": ["https://accounts.idp.example/config.json"]
}

JSON फ़ाइल में, आईडीपी (IdP) कैटगरी के साथ provider_urls प्रॉपर्टी होनी चाहिए config फ़ाइल के ऐसे यूआरएल जिन्हें इसके पाथ के हिस्से के तौर पर बताया जा सकता है आरपी के हिसाब से configURL navigator.credentials.get में. इतने लोगों को अरे में यूआरएल स्ट्रिंग सिर्फ़ एक के लिए हो सकती हैं. हालांकि, आपके अरे में बदलाव होने पर सुझाव नहीं देंगे.

आईडीपी (IdP) कॉन्फ़िगरेशन फ़ाइल और एंडपॉइंट बनाएं

आईडीपी (IdP) कॉन्फ़िगरेशन फ़ाइल में, ब्राउज़र के लिए ज़रूरी एंडपॉइंट की सूची दी जाती है. IdPs इस कॉन्फ़िगरेशन फ़ाइल के साथ-साथ, ज़रूरी एंडपॉइंट और यूआरएल को होस्ट करेगा. सभी JSON जवाब application/json कॉन्टेंट-टाइप के साथ दिए जाने चाहिए.

कॉन्फ़िगरेशन फ़ाइल का यूआरएल, आरपी पर navigator.credentials.get कॉल किया गया.

const credential = await navigator.credentials.get({
  identity: {
    context: 'signup',
    providers: [{
      configURL: 'https://accounts.idp.example/config.json',
      clientId: '********',
      nonce: '******'
    }]
  }
});
const { token } = credential;

आईडीपी (IdP) कॉन्फ़िगरेशन फ़ाइल की जगह का पूरा यूआरएल, configURL के तौर पर डालें. टास्क कब शुरू होगा ब्राउज़र की RP पर navigator.credentials.get() को कॉल किया गया है Origin हेडर या बिना GET अनुरोध वाली कॉन्फ़िगरेशन फ़ाइल को फ़ेच करता है Referer हेडर. अनुरोध में कुकी नहीं हैं और रीडायरेक्ट का पालन नहीं किया जाता है. इससे आईडीपी (IdP) को यह पता नहीं चलता कि अनुरोध किसने किया और किसने अनुरोध किया आरपी कनेक्ट करने की कोशिश कर रहा है. उदाहरण के लिए:

GET /config.json HTTP/1.1
Host: accounts.idp.example
Accept: application/json
Sec-Fetch-Dest: webidentity

ब्राउज़र को आईडीपी (IdP) से JSON रिस्पॉन्स मिलता है. इसमें यहां दिए गए डेटा शामिल होते हैं प्रॉपर्टी:

प्रॉपर्टी ब्यौरा
accounts_endpoint (ज़रूरी) खाते के एंडपॉइंट का यूआरएल.
client_metadata_endpoint (वैकल्पिक) क्लाइंट मेटाडेटा के एंडपॉइंट का यूआरएल.
id_assertion_endpoint (ज़रूरी) आईडी दावे के एंडपॉइंट के लिए यूआरएल.
disconnect (वैकल्पिक) डिसकनेक्ट एंडपॉइंट का यूआरएल.
login_url (ज़रूरी) आईडीपी (IdP) में साइन इन करने के लिए उपयोगकर्ता के लॉग इन पेज का यूआरएल.
branding (वैकल्पिक) ऑब्जेक्ट जिसमें ब्रैंडिंग के कई विकल्प मौजूद हैं.
branding.background_color (वैकल्पिक) ब्रैंडिंग विकल्प, जो "इस रूप में जारी रखें..." का बैकग्राउंड रंग सेट करता है बटन. काम के सीएसएस सिंटैक्स का इस्तेमाल करना, जैसे कि hex-color hsl(), rgb() या named-color.
branding.color (वैकल्पिक) ब्रैंडिंग विकल्प, जो "इस रूप में जारी रखें..." का टेक्स्ट रंग सेट करता है बटन. काम के सीएसएस सिंटैक्स का इस्तेमाल करना, जैसे कि hex-color hsl(), rgb() या named-color.
branding.icons (वैकल्पिक) ब्रैंडिंग विकल्प, जो साइन-इन डायलॉग में आइकॉन ऑब्जेक्ट को सेट करता है. आइकॉन ऑब्जेक्ट, दो पैरामीटर वाला अरे होता है:
  • url (ज़रूरी है): आइकॉन इमेज का यूआरएल. इसमें SVG इमेज काम नहीं करती.
  • size (ज़रूरी नहीं): आइकॉन के डाइमेंशन, जिन्हें ऐप्लिकेशन स्क्वेयर और एक रिज़ॉल्यूशन के तौर पर मानता है. यह संख्या 25 या उससे ज़्यादा होनी चाहिए.

आरपी, FedCM डायलॉग यूज़र इंटरफ़ेस (यूआई) में, identity.context वैल्यू के ज़रिए स्ट्रिंग में बदलाव कर सकता है पहले से तय पुष्टि को शामिल करने के लिए navigator.credentials.get() के लिए संदर्भ. वैकल्पिक प्रॉपर्टी "signin" (डिफ़ॉल्ट), "signup", में से एक हो सकती है "use" या "continue".

FedCM डायलॉग पर ब्रैंडिंग कैसे लागू की जाती है
FedCM डायलॉग पर ब्रैंडिंग कैसे लागू की जाती है

यहां आईडीपी (IdP) से मिलने वाले रिस्पॉन्स का मुख्य हिस्सा उदाहरण के तौर पर दिया गया है:

{
  "accounts_endpoint": "/accounts.php",
  "client_metadata_endpoint": "/client_metadata.php",
  "id_assertion_endpoint": "/assertion.php",
  "disconnect_endpoint": "/disconnect.php",
  "login_url": "/login",
  "branding": {
    "background_color": "green",
    "color": "#FFEEAA",
    "icons": [{
      "url": "https://idp.example/icon.ico",
      "size": 25
    }]
  }
}

ब्राउज़र जब कॉन्फ़िगरेशन फ़ाइल को फ़ेच कर लेता है, तो यह अगले अनुरोध को आईडीपी (IdP) एंडपॉइंट:

आईडीपी (IdP) एंडपॉइंट
आईडीपी (IdP) एंडपॉइंट

खाते का एंडपॉइंट

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

ब्राउज़र, कुकी के साथ GET का अनुरोध भेजता है. हालांकि, इसके लिए SameSite=None की अनुमति होनी चाहिए कोई client_id पैरामीटर, Origin हेडर या Referer हेडर. यह आईडीपी (IdP) को यह जानने से रोकता है कि उपयोगकर्ता किस आरपी को साइन करने की कोशिश कर रहा है में होना चाहिए. उदाहरण के लिए:

GET /accounts.php HTTP/1.1
Host: accounts.idp.example
Accept: application/json
Cookie: 0x23223
Sec-Fetch-Dest: webidentity

अनुरोध मिलने पर, सर्वर को:

  1. पुष्टि करें कि अनुरोध में Sec-Fetch-Dest: webidentity एचटीटीपी हेडर है.
  2. पहले से साइन-इन किए गए खातों के आईडी के साथ सेशन कुकी का मिलान करें.
  3. खातों की सूची के साथ जवाब दें.

ब्राउज़र को ऐसा JSON रिस्पॉन्स चाहिए जिसमें accounts प्रॉपर्टी शामिल हो की जानकारी के कलेक्शन में नीचे दी गई प्रॉपर्टी शामिल हैं:

प्रॉपर्टी ब्यौरा
id (ज़रूरी) उपयोगकर्ता का यूनीक आईडी.
name (ज़रूरी) उपयोगकर्ता का दिया गया और उपनाम.
email (ज़रूरी) उपयोगकर्ता का ईमेल पता.
given_name (वैकल्पिक) उपयोगकर्ता का नाम दिया गया.
picture (वैकल्पिक) इस्तेमाल करने वाले व्यक्ति की अवतार इमेज का यूआरएल.
approved_clients (वैकल्पिक) आरपी क्लाइंट आईडी का कलेक्शन, जिसके साथ उपयोगकर्ता ने रजिस्टर किया है.
login_hints (वैकल्पिक) आईडीपी (IdP) के साथ काम करने वाले सभी संभावित फ़िल्टर टाइप का कलेक्शन एक खाता. आरपी, navigator.credentials.get() शुरू कर सकता है प्रॉपर्टी का इस्तेमाल करके, loginHint प्रॉपर्टी को चुना गया खाता चुनें.
domain_hints (वैकल्पिक) उन सभी डोमेन की कैटगरी जिनसे खाता जुड़ा है. आरपी ये काम कर सकता है: navigator.credentials.get() को कॉल करें फ़िल्टर करने के लिए domainHint प्रॉपर्टी खाते.

जवाब के मुख्य हिस्से का उदाहरण:

{
  "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"],
    "login_hints": ["demo1", "demo1@idp.example"]
  }, {
    "id": "5678",
    "given_name": "Johnny",
    "name": "Johnny",
    "email": "johnny@idp.example",
    "picture": "https://idp.example/profile/456",
    "approved_clients": ["abc", "def", "ghi"],
    "login_hints": ["demo2", "demo2@idp.example"],
    "domain_hints": ["corp.example"]
  }]
}

अगर उपयोगकर्ता ने साइन इन नहीं किया है, तो एचटीटीपी 401 (बिना अनुमति के) का इस्तेमाल करके जवाब दें.

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

क्लाइंट मेटाडेटा का एंडपॉइंट

आईडीपी (IdP) का क्लाइंट मेटाडेटा एंडपॉइंट, भरोसेमंद पक्ष का मेटाडेटा दिखाता है, जैसे कि आरपी की निजता नीति और सेवा की शर्तें देखें. आरपी को आईडीपी (IdP) की निजता नीति और सेवा की शर्तों को पहले ही सबमिट कर लें. ये लिंक जब उपयोगकर्ता RP पर रजिस्टर नहीं करता है, तो साइन-इन डायलॉग में यह मैसेज दिखेगा आईडीपी है.

ब्राउज़र, client_id का इस्तेमाल करके GET का अनुरोध भेजता है navigator.credentials.get कुकी के बिना. उदाहरण के लिए:

GET /client_metadata.php?client_id=1234 HTTP/1.1
Host: accounts.idp.example
Origin: https://rp.example/
Accept: application/json
Sec-Fetch-Dest: webidentity

अनुरोध मिलने पर, सर्वर को:

  1. client_id के लिए प्रतिबंधित पार्टी तय करें.
  2. क्लाइंट मेटाडेटा के साथ जवाब दें.

क्लाइंट मेटाडेटा वाले एंडपॉइंट की प्रॉपर्टी में ये शामिल हैं:

प्रॉपर्टी ब्यौरा
privacy_policy_url (वैकल्पिक) आरपी की निजता नीति का यूआरएल.
terms_of_service_url (वैकल्पिक) आरपी की सेवा की शर्तों का यूआरएल.

ब्राउज़र को एंडपॉइंट से JSON रिस्पॉन्स मिलता है:

{
  "privacy_policy_url": "https://rp.example/privacy_policy.html",
  "terms_of_service_url": "https://rp.example/terms_of_service.html",
}

वापस किए गए क्लाइंट मेटाडेटा को ब्राउज़र इस्तेमाल करेगा और को ऐक्सेस किया जा सकता है.

आईडी दावा एंडपॉइंट

आईडीपी (IdP) का आईडी दावा करने वाला एंडपॉइंट, उनके साइन इन किए हुए उपयोगकर्ता के लिए दावा करता है. जब उपयोगकर्ता navigator.credentials.get() का इस्तेमाल करके, आरपी की वेबसाइट में साइन इन करता है कॉल करते हैं, तो ब्राउज़र कुकी के साथ POST अनुरोध भेजता है SameSite=None और application/x-www-form-urlencoded का कॉन्टेंट-टाइप इस एंडपॉइंट पर नीचे दी गई जानकारी दी गई है:

प्रॉपर्टी ब्यौरा
client_id (ज़रूरी) आरपी का क्लाइंट आइडेंटिफ़ायर.
account_id (ज़रूरी) साइन इन करने वाले उपयोगकर्ता का यूनीक आईडी.
nonce (वैकल्पिक) प्रतिबंधित पार्टी की ओर से अनुरोध की संख्या.
disclosure_text_shown बूलियन के बजाय, "true" या "false" की स्ट्रिंग में नतीजे. अगर जानकारी का टेक्स्ट नहीं दिखाया गया, तो नतीजा "false" है. ऐसा तब होता है, जब खाते के एंडपॉइंट से मिले जवाब की approved_clients प्रॉपर्टी सूची में, आरपी का क्लाइंट आईडी शामिल हो. इसके अलावा, ऐसा तब भी होता है, जब ब्राउज़र ने approved_clients के न होने पर साइन-अप करते समय कोई गतिविधि देखी हो.
is_auto_selected अगर आरपी पर, अपने-आप फिर से पुष्टि करने की सुविधा का इस्तेमाल किया जाता है, तो is_auto_selected का मतलब है कि "true". अगर ऐसा नहीं है, तो "false". इसका इस्तेमाल, सुरक्षा से जुड़ी ज़्यादा सुविधाओं के लिए किया जाता है. उदाहरण के लिए, कुछ उपयोगकर्ता बेहतर सुरक्षा वाले टीयर को प्राथमिकता दे सकते हैं, जिसके लिए पुष्टि करने में साफ़ तौर पर उपयोगकर्ता मध्यस्थता की ज़रूरत होती है. अगर किसी आईडीपी (IdP) को इस तरह की मध्यस्थता के बिना टोकन अनुरोध मिलता है, तो वह अनुरोध को अलग तरीके से हैंडल कर सकता है. उदाहरण के लिए, गड़बड़ी का ऐसा कोड दें जिससे आरपी, mediation: required का इस्तेमाल करके FedCM API को फिर से कॉल कर सके.

एचटीटीपी हेडर का उदाहरण:

POST /assertion.php HTTP/1.1
Host: accounts.idp.example
Origin: https://rp.example/
Content-Type: application/x-www-form-urlencoded
Cookie: 0x23223
Sec-Fetch-Dest: webidentity

account_id=123&client_id=client1234&nonce=Ct60bD&disclosure_text_shown=true&is_auto_selected=true

अनुरोध मिलने पर, सर्वर को:

  1. सीओआरएस (क्रॉस-ऑरिजिन रिसॉर्स) की मदद से अनुरोध का जवाब देना शेयर करना).
  2. पुष्टि करें कि अनुरोध में Sec-Fetch-Dest: webidentity एचटीटीपी हेडर है.
  3. Origin हेडर को client_id के तय किए गए आरपी ऑरिजिन से मैच करें. अगर वे मेल नहीं खाते हैं, तो उन्हें अस्वीकार करें.
  4. account_id का मिलान पहले से साइन-इन किए गए खाते के आईडी से करें. अस्वीकार करें, अगर वे मेल नहीं खाते.
  5. टोकन के साथ जवाब दें. अगर अनुरोध अस्वीकार कर दिया जाता है, तो जवाब में गड़बड़ी करें जवाब.

टोकन जारी करने का तरीका आईडीपी (IdP) पर निर्भर करता है. हालांकि, आम तौर पर यह आईडीपी से साइन किया जाता है खाता आईडी, क्लाइंट आईडी, जारी करने वाले का नाम, nonce जैसी जानकारी, ताकि आरपी यह पुष्टि कर सकता है कि टोकन सही है या नहीं.

ब्राउज़र को ऐसा JSON रिस्पॉन्स चाहिए जिसमें ये प्रॉपर्टी शामिल हों:

प्रॉपर्टी ब्यौरा
token (ज़रूरी) टोकन एक ऐसी स्ट्रिंग होती है जिसमें पुष्टि करने के बारे में दावे होते हैं.
{
  "token": "***********"
}

लौटाए गए टोकन को ब्राउज़र, आरपी को पास करता है, ताकि आरपी पुष्टि करें.

गड़बड़ी का मैसेज दिखाना

id_assertion_endpoint से भी "गड़बड़ी" दिख सकती है रिस्पॉन्स में दो वैकल्पिक फ़ील्ड होते हैं:

  • code: आईडीपी (IdP), OAuth 2.0 में मौजूद आम गड़बड़ियों में से किसी एक को चुन सकता है बताई गई गड़बड़ी सूची (invalid_request, unauthorized_client, access_denied, server_error और temporarily_unavailable) चुनें या किसी भी आर्बिट्रेरी स्ट्रिंग का इस्तेमाल करें. यदि बाद वाला है, तो Chrome यह गड़बड़ी के यूज़र इंटरफ़ेस (यूआई) को सामान्य गड़बड़ी के मैसेज के साथ रेंडर करता है और कोड को आरपी को पास करता है.
  • url: यह ऐसे वेब पेज की पहचान करता है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. साथ ही, इसमें गड़बड़ी के बारे में ज़्यादा जानकारी दें. यह फ़ील्ड उपयोगकर्ताओं के लिए उपयोगी है, क्योंकि ब्राउज़र नेटिव यूज़र इंटरफ़ेस (यूआई) पर लागू होता है. उदाहरण के लिए, अगले चरणों के लिंक, ग्राहक सेवा से संपर्क करना जानकारी वगैरह. अगर कोई उपयोगकर्ता गड़बड़ी के बारे में ज़्यादा जानना चाहता है, और उसे कैसे ठीक किया जाए, तो वे देखें. यूआरएल और आईडीपी configURL, दोनों एक ही साइट का होना चाहिए.
// id_assertion_endpoint response
{
  "error" : {
     "code": "access_denied",
     "url" : "https://idp.example/error?type=access_denied"
  }
}

एंडपॉइंट को डिसकनेक्ट करें

IdentityCredential.disconnect() शुरू करने पर, ब्राउज़र एक क्रॉस-ऑरिजिन भेजता है SameSite=None वाली कुकी के साथ POST अनुरोध और एक सामग्री-प्रकार इस डिसकनेक्ट एंडपॉइंट से application/x-www-form-urlencoded नीचे दी गई जानकारी:

प्रॉपर्टी ब्यौरा
account_hint आईडीपी (IdP) खाते के लिए हिंट.
client_id आरपी का क्लाइंट आइडेंटिफ़ायर.
POST /disconnect.php HTTP/1.1
Host: idp.example
Origin: rp.example
Content-Type: application/x-www-form-urlencoded
Cookie: 0x123
Sec-Fetch-Dest: webidentity

account_hint=account456&client_id=rp123

अनुरोध मिलने पर, सर्वर को:

  1. सीओआरएस (क्रॉस-ऑरिजिन रिसॉर्स) की मदद से, अनुरोध का जवाब देना शेयर करना).
  2. पुष्टि करें कि अनुरोध में Sec-Fetch-Dest: webidentity एचटीटीपी हेडर है.
  3. Origin हेडर को client_id के तय किए गए आरपी ऑरिजिन से मैच करें. अगर वे मेल नहीं खाते हैं, तो उन्हें अस्वीकार करें.
  4. account_hint का मिलान पहले से साइन-इन किए गए खातों के आईडी से करें.
  5. उपयोगकर्ता के खाते को आरपी से डिसकनेक्ट करें.
  6. JSON में, उपयोगकर्ता के खाते की जानकारी के साथ ब्राउज़र को जवाब दें फ़ॉर्मैट.

JSON पेलोड का उदाहरण इस तरह दिखता है:

{
  "account_id": "account456"
}

इसके बजाय, अगर आईडीपी (IdP) चाहता है कि ब्राउज़र, ब्राउज़र से जुड़े सभी खातों को डिसकनेक्ट करे आरपी, ऐसी स्ट्रिंग पास करें जो किसी भी खाता आईडी से मैच नहीं होती, जैसे कि "*".

लॉगिन यूआरएल

Login Status API के साथ, आईडीपी (IdP) को उपयोगकर्ता के लॉगिन स्थिति. हालांकि, हो सकता है कि स्थितियां सिंक न हों, जैसे कि सेशन खत्म होने पर. ऐसी स्थिति में, ब्राउज़र, उपयोगकर्ताओं को लॉगिन पेज के ज़रिए आईडीपी (IdP) में डाइनैमिक तरीके से साइन इन करने की अनुमति दे सकता है आईडीपी कॉन्फ़िगरेशन फ़ाइल की login_url से तय किया गया यूआरएल.

FedCM डायलॉग, साइन इन का सुझाव देने वाला एक मैसेज दिखाता है, जैसा कि नीचे दी गई इमेज है.

A
आईडीपी (IdP) में साइन इन करने का सुझाव देने वाला FedCM डायलॉग.

जब उपयोगकर्ता जारी रखें बटन पर क्लिक करता है, तो ब्राउज़र एक पॉप-अप विंडो खोलता है आईडीपी (IdP) के लॉगिन पेज के लिए.

अगर आप
आईडीपी (IdP) में साइन इन करने के बटन पर क्लिक करने के बाद, उदाहरण के तौर पर एक डायलॉग दिखाया गया है.

डायलॉग एक सामान्य ब्राउज़र विंडो है, जिसमें पहले-पक्ष की कुकी हैं. जो भी हो आईडीपी (IdP) डायलॉग बॉक्स में होता है और कोई विंडो हैंडल उपलब्ध नहीं होता का इस्तेमाल करें. उपयोगकर्ता के बाद यह साइन इन किया हुआ है, तो आईडीपी (IdP) को:

  • Set-Login: logged-in हेडर भेजें या navigator.login.setStatus("logged-in") एपीआई की मदद से ब्राउज़र को यह बताया जाता है कि उपयोगकर्ता ने साइन इन किया है.
  • डायलॉग बॉक्स बंद करने के लिए, IdentityProvider.close() पर कॉल करें.
A
FedCM का इस्तेमाल करके, आईडीपी (IdP) में साइन इन करने के बाद, कोई उपयोगकर्ता आरपी में साइन इन करता है.

ब्राउज़र को, आइडेंटिटी प्रोवाइडर पर उपयोगकर्ता के लॉगिन स्टेटस के बारे में जानकारी दें

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

आईडीपी, एचटीटीपी हेडर भेजकर उपयोगकर्ता के लॉगिन स्टेटस का सिग्नल ब्राउज़र को दे सकते हैं इसके अलावा, उपयोगकर्ता के आईडीपी (IdP) पर साइन इन होने पर या जब उपयोगकर्ता ने आईडीपी (IdP) पर साइन इन किया हो, तब JavaScript API को कॉल करके उपयोगकर्ता अपने सभी आईडीपी (IdP) खातों से साइन आउट हो जाता है. हर आईडीपी (IdP) के लिए (जिसे आईडीपी से पहचाना जाता है) config यूआरएल) ब्राउज़र, लॉगिन स्थिति को दिखाने वाला त्रि-स्टेट वैरिएबल रखता है संभावित वैल्यू वाले logged-in, logged-out, और unknown. डिफ़ॉल्ट स्थिति unknown है.

यह बताने के लिए कि उपयोगकर्ता ने साइन इन किया है, Set-Login: logged-in एचटीटीपी हेडर भेजें आईडीपी (IdP) पर जाएं और उसी साइट के सबरिसॉर्स अनुरोध पर जाएं. ऑरिजिन:

Set-Login: logged-in

इसके अलावा, JavaScript API को navigator.login.setStatus("logged-in") कॉल किया जा सकता है टॉप-लेवल नेविगेशन में, आईडीपी (IdP) ऑरिजिन से:

navigator.login.setStatus("logged-in")

ये कॉल, उपयोगकर्ता के लॉगिन स्टेटस को logged-in के तौर पर रिकॉर्ड करते हैं. उपयोगकर्ता के लॉगिन में स्थिति logged-in पर सेट है. आरपी कॉलिंग की सुविधा से, FedCM आईडीपी (IdP) से अनुरोध करता है खातों के एंडपॉइंट और FedCM में उपयोगकर्ता के लिए उपलब्ध खाते दिखाता है डायलॉग.

यह बताने के लिए कि उपयोगकर्ता ने अपने सभी खातों से साइन आउट कर दिया है, टॉप-लेवल नेविगेशन या उसी साइट के सबरिसॉर्स में Set-Login: logged-out एचटीटीपी हेडर भेजें आईडीपी (IdP) के ऑरिजिन पर अनुरोध:

Set-Login: logged-out

इसके अलावा, JavaScript API को navigator.login.setStatus("logged-out") कॉल किया जा सकता है टॉप-लेवल नेविगेशन में, आईडीपी (IdP) ऑरिजिन से:

navigator.login.setStatus("logged-out")

ये कॉल, उपयोगकर्ता के लॉगिन स्टेटस को logged-out के तौर पर रिकॉर्ड करते हैं. जब उपयोगकर्ता की लॉगिन स्थिति logged-out है, आईडीपी (IdP) के खाते के एंडपॉइंट पर अनुरोध भेजा जा सकता है.

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

  • अगर एंडपॉइंट, चालू खातों की सूची दिखाता है, तो स्टेटस को अपडेट करें logged-in पर जाएं और उन खातों को देखने के लिए FedCM डायलॉग खोलें.
  • अगर एंडपॉइंट कोई भी खाता नहीं दिखाता है, तो स्टेटस को logged-out पर अपडेट करें और FedCM कॉल को विफल कर दिया गया.

उपयोगकर्ता को डाइनैमिक लॉगिन फ़्लो से साइन इन करने की सुविधा देना

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

आइडेंटिटी प्रोवाइडर की मदद से, भरोसेमंद पक्ष में साइन इन करें

आईडीपी (IdP) का कॉन्फ़िगरेशन और एंडपॉइंट उपलब्ध होने पर, आरपी कॉल कर सकते हैं उपयोगकर्ताओं को प्रतिबंधित पार्टी में साइन इन करने की अनुमति देने का अनुरोध करने के लिए navigator.credentials.get() आपको आईडीपी (IdP) से संपर्क करना होगा.

एपीआई को कॉल करने से पहले, आपको इस बात की पुष्टि करनी होगी कि [FedCM उपयोगकर्ता का ब्राउज़र]. FedCM उपलब्ध है या नहीं, यह देखने के लिए इस कोड को अपने आस-पास रैप करें FedCM को लागू करना:

if ('IdentityCredential' in window) {
  // If the feature is available, take action
}

उपयोगकर्ताओं को आरपी टीम के आईडीपी (IdP) से साइन इन करने की अनुमति देने का अनुरोध करने के लिए, यह तरीका अपनाएं: उदाहरण के लिए:

const credential = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://accounts.idp.example/config.json',
      clientId: '********',
      nonce: '******'
    }]
  }
});
const { token } = credential;

providers प्रॉपर्टी, IdentityProvider का कलेक्शन लेती है ऐसे ऑब्जेक्ट जिनमें ये प्रॉपर्टी:

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

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

साइन अप की स्थिति इस आधार पर तय होती है कि साइन अप की स्थिति, यहां दी गई शर्तों के हिसाब से है या नहीं पूरा किया गया हो या नहीं:

  • अगर approved_clients में आरपी की clientId शामिल है.
  • अगर ब्राउज़र को याद है कि उपयोगकर्ता ने आरपी के लिए पहले ही साइन अप किया हुआ है.
कोई उपयोगकर्ता FedCM का इस्तेमाल करके आरपी में साइन इन करता है

जब आरपी ने navigator.credentials.get() पर कॉल किया, तो ये कार्रवाइयां की जा सकती हैं स्थान:

  1. ब्राउज़र, अनुरोध भेजता है और कई दस्तावेज़ों को फ़ेच करता है:
    1. लोकप्रिय फ़ाइल और आईडीपी कॉन्फ़िगरेशन फ़ाइल है जो एंडपॉइंट के बारे में जानकारी देती है.
    2. खातों की सूची.
    3. ज़रूरी नहीं: आरपी की निजता नीति और सेवा की शर्तों के यूआरएल, क्लाइंट मेटाडेटा एंडपॉइंट से लिया जाता है.
  2. ब्राउज़र उन खातों की सूची दिखाता है जिनका इस्तेमाल करके उपयोगकर्ता साइन-इन कर सकता है, और साथ ही, सेवा की शर्तों और निजता नीति की जानकारी भी मिलेगी.
  3. साइन इन करने के लिए उपयोगकर्ता के कोई खाता चुनने के बाद, ID दावा एंडपॉइंट को आईडीपी (IdP) को भेजा जाता है, ताकि टोकन.
  4. उपयोगकर्ता की पुष्टि करने के लिए, आरपी टोकन की पुष्टि कर सकता है.
लॉगिन एपीआई कॉल
लॉगिन एपीआई कॉल

यह उम्मीद की जाती है कि आरपी, उन ब्राउज़र पर काम करेगा जो FedCM के साथ काम नहीं करते हैं. उपयोगकर्ताओं के पास पहले से मौजूद, गैर-FedCM साइन-इन प्रोसेस का इस्तेमाल करने की सुविधा होनी चाहिए. पूरा होने तक तीसरे पक्ष की कुकी के इस्तेमाल को पूरी तरह से बंद कर दिया गया है. हालांकि, भी काम का नहीं है.

आरपी सर्वर से टोकन की पुष्टि होने के बाद आरपी, उपयोगकर्ता को रजिस्टर कर सकता है या उन्हें साइन-इन करने दें और नया सेशन शुरू करें.

लॉगिन हिंट एपीआई

उपयोगकर्ता के साइन इन करने के बाद, कभी-कभी भरोसेमंद पक्ष (आरपी), उपयोगकर्ता से कहता है कि वह फिर से पुष्टि करें. हालांकि, हो सकता है कि उपयोगकर्ता को यह पता न हो कि वह किस खाते का इस्तेमाल कर रहा है. अगर आरपी यह तय कर सकता है कि किस खाते से साइन इन करना है, तो एक खाता चुनें.

प्रतिबंधित पार्टी का इस्तेमाल करके, किसी खाते को चुनिंदा तरीके से दिखाया जा सकता है इनमें से किसी एक प्रॉपर्टी के साथ, loginHint प्रॉपर्टी वाला navigator.credentials.get() खातों की सूची से login_hints वैल्यू फ़ेच की गईं एंडपॉइंट, जैसा कि नीचे दिए गए कोड सैंपल में दिखाया गया है:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "123",
      nonce: nonce,
      loginHint : "demo1@example.com"
    }]
  }
});

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

डोमेन संकेत एपीआई

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

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

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

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

डोमेन हिंट से किसी खाते का मैच न होने पर लॉगिन के प्रॉम्प्ट का उदाहरण.
domainHint से मेल न खाने वाले किसी खाते के लॉगिन प्रॉम्प्ट का उदाहरण.

गड़बड़ी का मैसेज दिखाएं

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

A
उपयोगकर्ता की साइन-इन करने की कोशिश के विफल होने के बाद गड़बड़ी का मैसेज दिखाने वाला FedCM डायलॉग. स्ट्रिंग गड़बड़ी के टाइप से जुड़ी होती है.
try {
  const cred = await navigator.credentials.get({
    identity: {
      providers: [
        {
          configURL: "https://idp.example/manifest.json",
          clientId: "1234",
        },
      ],
    }
  });
} catch (e) {
  const code = e.code;
  const url = e.url;
}

पहली बार पुष्टि करने के बाद, उपयोगकर्ताओं की अपने-आप फिर से पुष्टि करने की सुविधा

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

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

अपने-आप फिर से पुष्टि करने की सुविधा से, ब्राउज़र अपने-आप लागू होने वाले विकल्प के हिसाब से अपना काम करता है navigator.credentials.get() पर कॉल करते समय mediation के लिए यह तय करें.

const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/fedcm.json",
      clientId: "1234",
    }],
  },
  mediation: 'optional', // this is the default
});

// `isAutoSelected` is `true` if auto-reauthn was performed.
const isAutoSelected = cred.isAutoSelected;

mediation, क्रेडेंशियल मैनेजमेंट में मौजूद एक प्रॉपर्टी है एपीआई, यह उसी तरह से काम करता है रास्ता यह बिलकुल वैसा ही होता है जैसा PasswordCredential और FederatedCredential और यह कुछ हद तक PublicKeyCredential भी. प्रॉपर्टी में ये चार वैल्यू स्वीकार की जाती हैं:

  • 'optional'(डिफ़ॉल्ट): अगर संभव हो, तो अपने-आप फिर से पुष्टि करने की सुविधा चालू करें. अगर ऐसा नहीं होता है, तो मीडिएशन की ज़रूरत होती है. बुध साइन-इन पेज पर इस विकल्प को चुनने की सलाह देते हैं.
  • 'required': आगे बढ़ने के लिए हमेशा मध्यस्थता की ज़रूरत होती है, उदाहरण के लिए, "जारी रखें" बटन पर क्लिक करें. इस विकल्प को तब चुनें, जब आपके उपयोगकर्ताओं से हर बार उनकी पुष्टि करने की अनुमति साफ़ तौर पर देने की अनुमति नहीं होगी.
  • 'silent': हो सके, तो अपने-आप फिर से पुष्टि करने की सुविधा, बिना किसी सूचना के अपने-आप पुष्टि नहीं हो पाती है. ऐसा करने के लिए, मध्यस्थता नहीं करेगा. हम इस विकल्प को चुनने के लिए उन पेजों के बजाय जो पेज चुनते हैं उनके लिए खास तौर पर साइन-इन पेज हो, लेकिन जहां आपको उपयोगकर्ताओं को साइन इन बनाए रखना है उदाहरण के लिए, शिपिंग वेबसाइट पर आइटम पेज या किसी समाचार पर लेख वाला पेज वेबसाइट.
  • 'conditional': इसका इस्तेमाल WebAuthn के लिए किया जाता है और फ़िलहाल यह FedCM के लिए उपलब्ध नहीं है.

इस कॉल में, अपने-आप फिर से पुष्टि करने की प्रोसेस नीचे दी गई शर्तों के मुताबिक होगी:

  • FedCM इस्तेमाल करने के लिए उपलब्ध है. उदाहरण के लिए, उपयोगकर्ता ने FedCM को अक्षम नहीं किया है दुनिया भर में या सेटिंग में RP के लिए.
  • उपयोगकर्ता ने इस डिवाइस पर वेबसाइट में साइन इन करने के लिए, FedCM API वाले सिर्फ़ एक खाते का इस्तेमाल किया ब्राउज़र खोलें.
  • उपयोगकर्ता ने उस खाते से आईडीपी (IdP) में साइन इन किया है.
  • पिछले 10 मिनट में, अपने-आप फिर से पुष्टि करने की सुविधा नहीं मिली.
  • आरपी ने अभी तक कॉल नहीं किया है इसके बाद, navigator.credentials.preventSilentAccess() पिछला साइन इन.

जब ये शर्तें पूरी होती हैं, तब अपने-आप फिर से पुष्टि करने की कोशिश FedCM navigator.credentials.get() को शुरू करते ही उपयोगकर्ता शुरू हो जाता है.

mediation: optional के बाद, अपने-आप फिर से पुष्टि करने की सुविधा उपलब्ध नहीं है: केवल ब्राउज़र को पता होता है; आरपी यह देख सकता है कि अपने-आप फिर से पुष्टि करने की सुविधा चालू की गई है या नहीं isAutoSelected प्रॉपर्टी की जांच की जा रही है.

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

FedCM की मदद से, उपयोगकर्ता अपने-आप फिर से पुष्टि कर रहा है.

preventSilentAccess() का इस्तेमाल करके मध्यस्थता लागू करें

साइन आउट करने के तुरंत बाद, उपयोगकर्ताओं के लिए अपने-आप फिर से पुष्टि करने से बहुत अच्छा उपयोगकर्ता अनुभव मिलता है. इसलिए, FedCM का 10-मिनट का क्वाइट पीरियड होता है, इस तरह के व्यवहार को रोकने के लिए, अपने-आप फिर से पुष्टि करें. इसका मतलब है कि अपने-आप फिर से पुष्टि करने की सुविधा काम करेगी हर 10 मिनट में ज़्यादा से ज़्यादा एक बार, जब तक उपयोगकर्ता वापस साइन इन नहीं करता 10 मिनट. आरपी को navigator.credentials.preventSilentAccess() को इस पर कॉल करना चाहिए उपयोगकर्ता के साइन आउट करने पर, अपने-आप फिर से पुष्टि करने की सुविधा को बंद करने के लिए, ब्राउज़र से साफ़ तौर पर अनुरोध करें RP को खास तौर पर, उदाहरण के लिए, 'साइन-आउट करें' बटन पर क्लिक करके.

function signout() {
  navigator.credentials.preventSilentAccess();
  location.href = '/signout';
}

सेटिंग में जाकर, लोग अपने-आप फिर से पुष्टि करने की सुविधा से ऑप्ट-आउट कर सकते हैं

सेटिंग मेन्यू में जाकर, उपयोगकर्ता अपने-आप फिर से पुष्टि करने की सुविधा से ऑप्ट-आउट कर सकते हैं:

  • डेस्कटॉप Chrome में, chrome://password-manager/settings > पर जाएं अपने Google खाते का इस्तेमाल करके स्वचालित रूप से.
  • Android Chrome पर, सेटिंग > खोलें Password Manager > टैप करके सबसे ऊपर दाएं कोने में कॉग दबाएं > अपने-आप साइन-इन.

टॉगल को बंद करके, लोग अपने-आप फिर से पुष्टि करने की सुविधा से ऑप्ट-आउट कर सकते हैं. इसके लिए: हैं बेमिसाल. यह सेटिंग सभी डिवाइसों पर सेव और सिंक की जाती है. ऐसा तब होता है, जब उपयोगकर्ता Chrome इंस्टेंस पर किसी Google खाते में प्रवेश किया गया है और समन्वयन है चालू किया गया.

आईडीपी को आरपी से डिसकनेक्ट करें

अगर किसी उपयोगकर्ता ने FedCM के ज़रिए, आईडीपी का इस्तेमाल करके पहले आरपी में साइन इन किया था, तो संबंध को ब्राउज़र द्वारा कनेक्ट की गई सूची के रूप में स्थानीय रूप से याद रखा जाता है खाते. आरपी, IdentityCredential.disconnect() फ़ंक्शन का इस्तेमाल करना होगा. इस फ़ंक्शन को टॉप लेवल आरपी फ़्रेम. आरपी को configURL पास करना होगा, clientId जिनका इस्तेमाल वह करता है इसके लिए, आपको आईडीपी (IdP) से और accountHint को डिसकनेक्ट करना होगा. खाता संकेत एक आर्बिट्रेरी स्ट्रिंग हो सकता है, बशर्ते डिसकनेक्ट एंडपॉइंट पहचान सके खाते से जुड़ा हो सकता है, उदाहरण के लिए कोई ईमेल पता या यूज़र आईडी, जिसमें ऐसा करना ज़रूरी नहीं है कि खाता सूची के एंडपॉइंट से मिले खाता आईडी का मिलान करें:

// Disconnect an IdP account "account456" from the RP "https://idp.com/". This is invoked on the RP domain.
IdentityCredential.disconnect({
  configURL: "https://idp.com/config.json",
  clientId: "rp123",
  accountHint: "account456"
});

IdentityCredential.disconnect(), Promise दिखाता है. इस वादे को अपवाद के तौर पर ये वजहें हो सकती हैं:

  • उपयोगकर्ता ने FedCM के ज़रिए आईडीपी (IdP) का इस्तेमाल करके, आरपी में साइन इन नहीं किया है.
  • FedCM की अनुमतियों की नीति के बिना, iframe में एपीआई को शुरू किया गया है.
  • configURL अमान्य है या डिसकनेक्ट एंडपॉइंट मौजूद नहीं है.
  • कॉन्टेंट की सुरक्षा के बारे में नीति (सीएसपी) की जांच नहीं हो सकी.
  • डिसकनेक्ट करने का एक अनुरोध बाकी है.
  • उपयोगकर्ता ने ब्राउज़र सेटिंग में FedCM को बंद कर दिया है.

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

क्रॉस-ऑरिजिन iframe से FedCM को कॉल करें

FedCM को क्रॉस-ऑरिजिन iframe में ही शुरू किया जा सकता है. इसके लिए, identity-credentials-get की अनुमतियों की नीति (अगर पैरंट फ़्रेम इसकी अनुमति देता हो. यहां की यात्रा पर हूं ऐसा करने के लिए, allow="identity-credentials-get" एट्रिब्यूट को iframe टैग में जोड़ें इस तरह से:

<iframe src="https://fedcm-cross-origin-iframe.glitch.me" allow="identity-credentials-get"></iframe>

उदाहरण में, यह देखा जा सकता है कि यह कैसे काम करता है.

इसके अलावा, अगर पैरंट फ़्रेम किसी ऑरिजिन से FedCM को कॉल करना चाहता है, तो अनुमति वाले ऑरिजिन की सूची के साथ Permissions-Policy हेडर भेजें.

Permissions-Policy: identity-credentials-get=(self "https://fedcm-cross-origin-iframe.glitch.me")

अनुमतियों की नीति कैसे काम करती है, इस बारे में ज़्यादा जानने के लिए, कंट्रोल करना अनुमतियों वाली ब्राउज़र की सुविधाएं नीति.