FedCM अपडेट: लॉगिन स्टेटस एपीआई, गड़बड़ी एपीआई, और अपने-आप चुने गए फ़्लैग एपीआई

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

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

इसके अलावा, Chrome दो नई फ़ेडरेटेड क्रेडेंशियल मैनेजमेंट (FedCM) सुविधाएं भी भेज रहा है:

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

लॉगिन स्टेटस एपीआई

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

ब्राउज़र को उपयोगकर्ता के लॉगिन स्टेटस के बारे में बताएं

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

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

Set-Login: logged-in

इसके अलावा, आईडीपी (IdP) ऑरिजिन से JavaScript API navigator.login.setStatus('logged-in') को कॉल करें:

navigator.login.setStatus('logged-in');

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

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

Set-Login: logged-out

इसके अलावा, आईडीपी (IdP) ऑरिजिन से JavaScript API navigator.login.setStatus('logged-out') को कॉल करें:

navigator.login.setStatus('logged-out');

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

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

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

उपयोगकर्ता सेशन की समयसीमा खत्म होने पर क्या होगा? उपयोगकर्ता को डाइनैमिक लॉगिन फ़्लो से साइन इन करने दें!

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

FedCM डायलॉग बॉक्स में साइन इन करने का सुझाव देने वाला मैसेज दिखता है, जैसा कि इस इमेज में दिखाया गया है.

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

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

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

लॉगिन पेज के यूआरएल में login_url शामिल होता है, जो आईडीपी कॉन्फ़िगरेशन फ़ाइल का हिस्सा होता है.

{
  "accounts_endpoint": "/auth/accounts",
  "client_metadata_endpoint": "/auth/metadata",
  "id_assertion_endpoint": "/auth/idtokens",
  "login_url": "/login"
  }
}

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

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

आप हमारे डेमो में लॉगिन स्थिति एपीआई व्यवहार को आज़मा सकते हैं.

  1. आईडीपी पर जाएं और साइन इन करें बटन पर टैप करें.
  2. आर्बिट्रेरी खाते से साइन इन करें.
  3. खाते की स्थिति ड्रॉपडाउन से, सेशन खत्म हो गया चुनें.
  4. निजी जानकारी अपडेट करें बटन दबाएं.
  5. FedCM का इस्तेमाल करने के लिए आरपी पर जाएं बटन पर टैप करें.

मॉड्यूल व्यवहार की मदद से, आईडीपी (IdP) में लॉगिन किए जाने की जानकारी देखी जा सकती है.

गड़बड़ी एपीआई

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

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

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

आईडीपी (IdP) एचटीटीपी एपीआई

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

  1. code
  2. url
// id_assertion_endpoint response
{
  "error": {
     "code": "access_denied",
     "url": "https://idp.example/error?type=access_denied"
  }
}

कोड के लिए, आईडीपी (IdP) OAuth 2.0 की गड़बड़ियों की सूची में से किसी एक जानी-पहचानी गड़बड़ी को चुन सकता है [invalid_request, unauthorized_client, access_denied, server_error, और temporarily_unavailable] इसके अलावा, किसी भी आर्बिट्रेरी स्ट्रिंग का इस्तेमाल कर सकता है. अगर बाद वाला मैसेज दिखता है, तो Chrome एक सामान्य गड़बड़ी के मैसेज के साथ गड़बड़ी यूज़र इंटरफ़ेस (यूआई) को रेंडर करता है और कोड को आरपी को पास करता है.

url के लिए, यह गड़बड़ी के बारे में जानकारी वाले वेब पेज की पहचान करता है, जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. साथ ही, उपयोगकर्ताओं को गड़बड़ी के बारे में ज़्यादा जानकारी देता है. यह फ़ील्ड उपयोगकर्ताओं के लिए उपयोगी है, क्योंकि ब्राउज़र किसी नेटिव यूज़र इंटरफ़ेस (यूआई) में गड़बड़ी के ज़्यादा मैसेज नहीं दिखा सकते. उदाहरण के लिए, अगले चरणों के लिंक, ग्राहक सेवा की संपर्क जानकारी वगैरह. अगर कोई उपयोगकर्ता, गड़बड़ी की जानकारी और उसे ठीक करने के तरीके के बारे में ज़्यादा जानना चाहता है, तो वह ब्राउज़र के यूज़र इंटरफ़ेस (यूआई) से उस पेज पर जा सकता है. यूआरएल और आईडीपी (IdP) configURL की साइट एक ही होनी चाहिए.

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;
}

अपने-आप चुना गया फ़्लैग एपीआई

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

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

इसलिए, अपने-आप फिर से पुष्टि करने की सुविधा चालू करना, डेवलपर के लिए फ़ायदेमंद होगा.

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

IdP शेयर करना

आईडीपी (IdP) को उपयोगकर्ता की अनुमति पोस्ट करने की अनुमति के साथ जानकारी शेयर करने के लिए, Chrome ने id_assertion_endpoint पर भेजे गए POST अनुरोध में is_auto_selected=true को शामिल किया है:

POST /fedcm_assertion_endpoint HTTP/1.1
Host: 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=Ct0D&disclosure_text_shown=true&is_auto_selected=true

Google का आरपी शेयर करना

ब्राउज़र, isAutoSelected में प्रतिबंधित पार्टी के साथ जानकारी को IdentityCredential के ज़रिए शेयर कर सकता है:

const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://idp.example/manifest.json',
      clientId: '1234'
    }]
  }
});

if (cred.isAutoSelected !== undefined) {
  const isAutoSelected = cred.isAutoSelected;
}

लोगों से जुड़ें और सुझाव, शिकायत या राय शेयर करें

अगर आपको कोई सुझाव/राय देनी है या शिकायत करनी है या टेस्टिंग के दौरान कोई समस्या आती है, तो crbug.com पर जाकर अपनी समस्या की जानकारी शेयर करें.

Unस्प्लैश पर लाल हैट वाली गर्ल की फ़ोटो