নির্ভরকারী পক্ষের পক্ষ থেকে FedCM-এর সাথে একটি পরিচয় সমাধান বাস্তবায়ন করুন

নির্ভরশীল পক্ষগুলিকে (RPs) তাদের সাইটে FedCM সক্ষম করতে নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করতে হবে:

রিলাইং পার্টিতে FedCM API কল করুন

একবার IdP-এর কনফিগারেশন এবং এন্ডপয়েন্টগুলি উপলব্ধ হয়ে গেলে, RP-গুলি navigator.credentials.get() এ কল করে ব্যবহারকারীকে IdP দিয়ে RP-তে সাইন ইন করার অনুমতি দেওয়ার অনুরোধ করতে পারে।

API কল করার আগে, আপনাকে নিশ্চিত করতে হবে যে FedCM ব্যবহারকারীর ব্রাউজারে উপলব্ধ । FedCM উপলব্ধ কিনা তা পরীক্ষা করতে, আপনার FedCM বাস্তবায়নের চারপাশে এই কোডটি মোড়ানো:

  if ('IdentityCredential' in window) {
    // If the feature is available, take action
  } else {
    // FedCM is not supported, use a different identity solution
  }

FedCM ব্যবহার করে RP-তে IdP-তে সাইন ইন করার জন্য, RP navigator.credentials.get() কল করতে পারে। Chrome 136 থেকে, RP একটি একক navigator.credentials.get() কলে একাধিক পরিচয় প্রদানকারীর একটি অ্যারে নির্দিষ্ট করে একাধিক IdP সমর্থন করতে পারে, উদাহরণস্বরূপ:

  const credential = await navigator.credentials.get({
      identity: {
        // Specify the IdP (or multiple IdPs, supported from Chrome 136) this Relying Party supports
        providers: [
        {
              configURL: 'https://accounts.idp-1.example/config.json',
              clientId: '********'
        },
        {
          configURL: 'https://accounts.idp-2.example/config.json',
          clientId: '********'
        }]
      }
    },
  );
  const { token } = credential;

  // Get the current IdP's configURL to identify which provider the user is signed in with
  const currentIdpConfigUrl = credential.configURL;
  if (currentIdpConfigUrl === 'https://idp1.example/foo.json') {
    // handle the case where the user signed in with idp1
  } else if (currentIdpConfigUrl === 'https://idp2.example/bar.json') {
    // handle the case where the user signed in with idp2
    }

IdP1 এবং IdP2 দিয়ে সাইন ইন করে একাধিক IdPs বৈশিষ্ট্যটি ব্যবহার করে দেখুন।

প্রসঙ্গ সম্পত্তি

ঐচ্ছিক context বৈশিষ্ট্যের সাহায্যে, RP FedCM ডায়ালগ UI-তে স্ট্রিং পরিবর্তন করতে পারে (উদাহরণস্বরূপ, "rp.example-এ সাইন ইন করুন…", "idp.example ব্যবহার করুন…") পূর্বনির্ধারিত প্রমাণীকরণ প্রসঙ্গগুলিকে সামঞ্জস্য করতে, উদাহরণস্বরূপ। context বৈশিষ্ট্যের নিম্নলিখিত মান থাকতে পারে:

  • signin (ডিফল্ট)
  • signup
  • use
FedCM ডায়ালগের UI উপাদানগুলি ব্যাখ্যা করে ডায়াগ্রাম: উপরের বাম দিকে, একটি আইকন প্রদর্শিত হচ্ছে। আইকনের ডানদিকে একটি প্রসঙ্গ উপাদান রয়েছে যা 'আইডিপি দিয়ে RP-তে সাইন ইন করুন' বার্তাটি প্রদর্শন করছে। নীচে কাস্টম টেক্সট এবং ব্যাকগ্রাউন্ড রঙ সহ একটি 'চালিয়ে যান' বোতাম রয়েছে।
ফেডসিএম ডায়ালগে ব্র্যান্ডিং কীভাবে প্রয়োগ করা হয়

উদাহরণস্বরূপ, use জন্য context সেট করলে নিম্নলিখিত বার্তাটি আসবে:

একটি FedCM ডায়ালগ যেখানে একটি কাস্টমাইজড প্রসঙ্গ বার্তা দেখানো হচ্ছে: 'FedCM দিয়ে সাইন ইন করুন' এর পরিবর্তে প্রসঙ্গ বার্তায় 'FedCM ব্যবহার করুন' লেখা আছে।
FedCM ডায়ালগটিতে একটি কাস্টমাইজড প্রসঙ্গ বার্তা দেখানো হচ্ছে।

অ্যাকাউন্ট তালিকার শেষ বিন্দু থেকে প্রাপ্ত প্রতিক্রিয়ায় approved_clients এর অস্তিত্বের উপর নির্ভর করে ব্রাউজারটি সাইন-আপ এবং সাইন-ইন ব্যবহারের ক্ষেত্রে ভিন্নভাবে পরিচালনা করে। ব্যবহারকারী যদি ইতিমধ্যেই RP তে সাইন আপ করে থাকেন তবে ব্রাউজারটি "চালিয়ে যেতে হবে ..." লেখা একটি প্রকাশক লেখা প্রদর্শন করবে না।

providers প্রপার্টি IdentityProvider অবজেক্টের একটি অ্যারে নেয় যার নিম্নলিখিত প্রপার্টি রয়েছে:

সরবরাহকারীর সম্পত্তি

providers প্রপার্টি IdentityProvider অবজেক্টের একটি অ্যারে নেয় যার নিম্নলিখিত প্রপার্টি রয়েছে:

সম্পত্তি বিবরণ
configURL (প্রয়োজনীয়) আইডিপি কনফিগারেশন ফাইলের একটি সম্পূর্ণ পথ।
clientId (প্রয়োজনীয়) আইডিপি কর্তৃক জারি করা আরপির ক্লায়েন্ট শনাক্তকারী।
loginHint (ঐচ্ছিক) অ্যাকাউন্টস এন্ডপয়েন্টস দ্বারা প্রদত্ত login_hints মানগুলির মধ্যে একটি নির্দিষ্ট করে, FedCM ডায়ালগটি নির্বাচিতভাবে নির্দিষ্ট অ্যাকাউন্টটি দেখায়।
domainHint (ঐচ্ছিক) অ্যাকাউন্টস এন্ডপয়েন্টস দ্বারা প্রদত্ত domain_hints মানগুলির মধ্যে একটি নির্দিষ্ট করে, FedCM ডায়ালগটি নির্বাচিতভাবে নির্দিষ্ট অ্যাকাউন্টটি দেখায়।
mode (ঐচ্ছিক) FedCM এর UI মোড নির্দিষ্ট করে এমন স্ট্রিং। এটি নিম্নলিখিত মানগুলির মধ্যে একটি হতে পারে:
  • "active" : FedCM প্রম্পট ব্যবহারকারীর মিথস্ক্রিয়া (যেমন একটি বোতামে ক্লিক করার মাধ্যমে) দ্বারা শুরু করা আবশ্যক।
  • "passive" : FedCM প্রম্পট সরাসরি ব্যবহারকারীর মিথস্ক্রিয়া ছাড়াই শুরু হবে।
সক্রিয় এবং প্যাসিভ মোডের মধ্যে পার্থক্য সম্পর্কে আরও জানতে ওভারভিউ পৃষ্ঠাটি দেখুন।

দ্রষ্টব্য: mode প্যারামিটারটি Chrome 132 থেকে সমর্থিত।
fields (ঐচ্ছিক) স্ট্রিংগুলির অ্যারে যা ব্যবহারকারীর তথ্য নির্দিষ্ট করে যা RP-এর সাথে শেয়ার করার জন্য IdP-এর প্রয়োজন। নিম্নলিখিত ক্ষেত্রগুলি ঐচ্ছিকভাবে নির্দিষ্ট করা যেতে পারে:
  • "name"
  • "username"
  • "email"
  • "tel"
  • "picture"
দ্রষ্টব্য: Fields API Chrome 132 এবং পরবর্তী সংস্করণ দ্বারা সমর্থিত। "username" এবং "tel" ক্ষেত্রগুলি Chrome 141 থেকে সমর্থিত।
params (ঐচ্ছিক) কাস্টম অবজেক্ট যা অতিরিক্ত কী-মান প্যারামিটার নির্দিষ্ট করতে দেয়:
  • scope : একটি স্ট্রিং মান যেখানে অতিরিক্ত অনুমতি থাকে যা RP-এর অনুরোধ করতে হবে, উদাহরণস্বরূপ "drive.readonly calendar.readonly"
  • nonce : এই নির্দিষ্ট অনুরোধের জন্য প্রতিক্রিয়া জারি করা হয়েছে তা নিশ্চিত করার জন্য একটি এলোমেলো স্ট্রিং। রিপ্লে আক্রমণ প্রতিরোধ করে।
  • অন্যান্য কাস্টম কী-মান পরামিতি।

দ্রষ্টব্য: params Chrome 132 থেকে সমর্থিত।

সক্রিয় মোড

FedCM বিভিন্ন UX মোড কনফিগারেশন সমর্থন করে। প্যাসিভ মোড হল ডিফল্ট মোড, এবং ডেভেলপারদের এটি কনফিগার করার প্রয়োজন হয় না।

সক্রিয় মোডে FedCM ব্যবহার করতে:

  1. ব্যবহারকারীর ব্রাউজারে বৈশিষ্ট্যটির প্রাপ্যতা পরীক্ষা করুন।
  2. একটি ক্ষণস্থায়ী ব্যবহারকারীর অঙ্গভঙ্গি, যেমন একটি বোতাম ক্লিকের মাধ্যমে API চালু করুন।
  3. API কলে mode প্যারামিটারটি পাস করুন:
  let supportsFedCmMode = false;
  try {
    navigator.credentials.get({
      identity: Object.defineProperty(
        // Check if this Chrome version supports the Mode API.
        {}, 'mode', {
          get: function () { supportsFedCmMode = true; }
        }
      )
    });
  } catch(e) {}

  if (supportsFedCmMode) {
    // The button mode is supported. Call the API with mode property:
    return await navigator.credentials.get({
      identity: {
        providers: [{
          configURL: 'https://idp.example/config.json',
          clientId: '123',
        }],
        // The 'mode' value defines the UX mode of FedCM.
        // - 'active': Must be initiated by user interaction (e.g., clicking a button).
        // - 'passive': Can be initiated without direct user interaction.
        mode: 'active'
      }
    });
  }

এই ডেমো দিয়ে অ্যাক্টিভ মোড ব্যবহার করে দেখুন।

সক্রিয় মোডে কাস্টম আইকন

অ্যাক্টিভ মোড আইডিপিগুলিকে ক্লায়েন্ট মেটাডেটা এন্ডপয়েন্ট রেসপন্সে সরাসরি RP-এর অফিসিয়াল লোগো আইকন অন্তর্ভুক্ত করার অনুমতি দেয়। RP-কে অবশ্যই তাদের ব্র্যান্ডিং ডেটা আগে থেকেই সরবরাহ করতে হবে।

একটি ক্রস-অরিজিন আইফ্রেমের মধ্যে থেকে FedCM-কে কল করুন

যদি প্যারেন্ট ফ্রেম অনুমতি দেয়, তাহলে identity-credentials-get permissions নীতি ব্যবহার করে FedCM একটি ক্রস-অরিজিন আইফ্রেমের মধ্যে থেকে আহ্বান করা যেতে পারে। এটি করার জন্য, 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")

অনুমতি নীতি কীভাবে কাজ করে সে সম্পর্কে আপনি "অনুমতি নীতির মাধ্যমে ব্রাউজার বৈশিষ্ট্য নিয়ন্ত্রণ করা" বিভাগে আরও জানতে পারবেন।

লগইন ইঙ্গিত API

লগইন ইঙ্গিত ব্যবহার করে, RP সুপারিশ করতে পারে যে কোন ব্যবহারকারীর কোন অ্যাকাউন্ট দিয়ে সাইন ইন করা উচিত। এটি এমন ব্যবহারকারীদের পুনঃপ্রমাণীকরণের জন্য সহায়ক হতে পারে যারা নিশ্চিত নন যে তারা আগে কোন অ্যাকাউন্ট ব্যবহার করেছেন।

RP গুলি loginHint প্রোপার্টি ব্যবহার করে navigator.credentials.get() ব্যবহার করে একটি নির্দিষ্ট অ্যাকাউন্ট বেছে বেছে দেখাতে পারে, যেখানে accounts তালিকার endpoint থেকে login_hints মান পাওয়া যায়, যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:

  return await navigator.credentials.get({
    identity: {
      providers: [{
        configURL: 'https://idp.example/manifest.json',
        clientId: '123',
        // Accounts endpoint can specify a 'login_hints' array for an account.
        // When RP specifies a 'exampleHint' value, only those accounts will be
        // shown to the user whose 'login_hints' array contains the 'exampleHint'
        // value
        loginHint : 'exampleHint'
      }]
    }
  });

যখন কোনও অ্যাকাউন্ট loginHint সাথে মেলে না, তখন FedCM ডায়ালগটি একটি লগইন প্রম্পট দেখায়, যা ব্যবহারকারীকে RP দ্বারা অনুরোধ করা ইঙ্গিতের সাথে মেলে এমন একটি IdP অ্যাকাউন্টে লগইন করতে দেয়। ব্যবহারকারী যখন প্রম্পটে ট্যাপ করেন, তখন কনফিগ ফাইলে নির্দিষ্ট লগইন URL সহ একটি ডায়ালগ উইন্ডো খোলা হয়। এরপর লিঙ্কটি লগইন ইঙ্গিত এবং ডোমেন ইঙ্গিত কোয়েরি প্যারামিটারের সাথে যুক্ত করা হয়।

ডোমেন ইঙ্গিত API

RP গুলি শুধুমাত্র একটি নির্দিষ্ট ডোমেনের সাথে সম্পর্কিত অ্যাকাউন্টগুলি বেছে বেছে দেখাতে পারে। এটি কর্পোরেট ডোমেনের মধ্যে সীমাবদ্ধ RP গুলির জন্য কার্যকর হতে পারে।

শুধুমাত্র নির্দিষ্ট ডোমেইন অ্যাকাউন্ট প্রদর্শনের জন্য, RP-কে navigator.credentials.get() কল করতে হবে domainHint প্রোপার্টি সহ, যেখানে accounts তালিকার endpoint থেকে domain_hints মানগুলির একটি সংগ্রহ করা হবে, যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:

  return await navigator.credentials.get({
    identity: {
      providers: [{
        configURL: 'https://idp.example/manifest.json',
        clientId: 'abc',
        // Accounts endpoint can specify a 'domain_hints' array for an account.
        // When RP specifies a '@domain.example' value, only those accounts will be
        // shown to the user whose 'domain_hints' array contains the
        // '@domain.example' value
        domainHint : '@domain.example'
      }]
    }
  });

যখন কোনও অ্যাকাউন্ট domainHint সাথে মেলে না, তখন FedCM ডায়ালগটি একটি লগইন প্রম্পট দেখায়, যা ব্যবহারকারীকে RP দ্বারা অনুরোধ করা ইঙ্গিতের সাথে মেলে এমন একটি IdP অ্যাকাউন্টে লগইন করতে দেয়। ব্যবহারকারী যখন প্রম্পটে ট্যাপ করেন, তখন কনফিগ ফাইলে নির্দিষ্ট লগইন URL সহ একটি ডায়ালগ উইন্ডো খোলা হয়। এরপর লিঙ্কটি লগইন ইঙ্গিত এবং ডোমেইন ইঙ্গিত কোয়েরি প্যারামিটারের সাথে যুক্ত করা হয়।

ডোমেইনহিন্টের সাথে কোনও অ্যাকাউন্ট মেলে না, তাহলে লগইন প্রম্পটের একটি উদাহরণ।
যখন কোনও অ্যাকাউন্ট domainHint সাথে মেলে না তখন লগইন প্রম্পটের একটি উদাহরণ।

আরও বিস্তারিত জানার জন্য ডেমোটি দেখুন।

কাস্টম প্যারামিটার

কাস্টম প্যারামিটার বৈশিষ্ট্যটি RP-কে ID অ্যাসারশন এন্ডপয়েন্টে অতিরিক্ত কী-মান প্যারামিটার সরবরাহ করতে দেয়। প্যারামিটার API-এর সাহায্যে, RP-রা মৌলিক সাইন-ইনের বাইরেও রিসোর্সের জন্য অনুমতির অনুরোধ করার জন্য IdP-তে অতিরিক্ত প্যারামিটার প্রেরণ করতে পারে। এই পরিস্থিতিতে অতিরিক্ত প্যারামিটার প্রেরণ কার্যকর হতে পারে:

  • RP-কে IdP-এর কাছে থাকা অতিরিক্ত অনুমতিগুলির জন্য গতিশীলভাবে অনুরোধ করতে হবে, যেমন বিলিং ঠিকানা বা ক্যালেন্ডার অ্যাক্সেস। ব্যবহারকারী এই অনুমতিগুলিকে একটি IdP-নিয়ন্ত্রিত UX প্রবাহের মাধ্যমে অনুমোদন করতে পারেন যা Continue on বৈশিষ্ট্য ব্যবহার করে চালু করা হয় এবং IdP তখন এই তথ্য ভাগ করে নেবে।

API ব্যবহার করার জন্য, RP navigator.credentials.get() কলে একটি অবজেক্ট হিসেবে params প্রোপার্টিতে প্যারামিটার যোগ করে:

  let {token} = await navigator.credentials.get({
    identity: {
      providers: [{
        clientId: '1234',
        configURL: 'https://idp.example/fedcm.json',
        // Key/value pairs that need to be passed from the
        // RP to the IdP but that don't really play any role with
        // the browser.
        params: {
          IDP_SPECIFIC_PARAM: '1',
          foo: 'BAR'
        }
      },
    }
  });

ব্রাউজারটি স্বয়ংক্রিয়ভাবে এটিকে IdP-তে একটি POST অনুরোধে রূপান্তর করবে এবং প্যারামিটারগুলি একটি একক url-এনকোডেড JSON-সিরিয়ালাইজড অবজেক্ট হিসাবে ব্যবহার করবে:

  // The assertion endpoint is drawn from the config file
  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

  // params are translated into urlencoded version of `{"IDP_SPECIFIC_PARAM":"1","foo":"bar"}`
  account_id=123&client_id=client1234&params=%22%7B%5C%22IDP_SPECIFIC_PARAM%5C%22%3A1%2C%5C%22foo%5C%22%3A%5C%22BAR%5C%22%7D%22.

যদি RP-এর কোনও অতিরিক্ত অনুমতির প্রয়োজন হয়, তাহলে IdP একটি পুনঃনির্দেশ লিঙ্ক প্রদান করতে পারে। উদাহরণস্বরূপ, node.js-এ:

  if (rpRequestsPermissions) {
    // Response with a URL if the RP requests additional permissions
    return res.json({
      continue_on: '/example-redirect',
    });
  }

ক্ষেত্র

RP ব্যবহারকারীর সাথে শেয়ার করার জন্য প্রয়োজনীয় আইডিপি তথ্য নির্দিষ্ট করতে পারে। এর মধ্যে নাম, ইমেল ঠিকানা, ব্যবহারকারীর নাম, ফোন নম্বর এবং প্রোফাইল ছবির যেকোনো সংমিশ্রণ অন্তর্ভুক্ত থাকতে পারে। অনুরোধকৃত তথ্য FedCM ডায়ালগের প্রকাশ UI-তে অন্তর্ভুক্ত করা হবে।

সাইন আপ করা ব্যবহারকারীরা একটি বার্তা দেখতে পাবেন যেখানে তাদের জানানো হবে যে idp.example অনুরোধকৃত তথ্য rp.example এর সাথে শেয়ার করবে যদি ব্যবহারকারী সাইন আপ করতে চান। যদি অ্যাকাউন্টস এন্ডপয়েন্ট থেকে আসা প্রতিক্রিয়ায় RP এর অনুরোধ করা ক্ষেত্রটি অন্তর্ভুক্ত না থাকে, তাহলে প্রকাশের পাঠ্যে এই ক্ষেত্রটি অন্তর্ভুক্ত থাকবে না। IdP id assertion endpoint থেকে সমস্ত অনুরোধকৃত ক্ষেত্রগুলি শিখবে এবং সিদ্ধান্ত নেবে যে তাদের এগিয়ে যাওয়ার জন্য আরও ব্যবহারকারীর অনুমতি সংগ্রহ করা উচিত কিনা।

FedCM ডায়ালগে নিম্নলিখিত প্রকাশক UI টেক্সট অন্তর্ভুক্ত রয়েছে: 'চালিয়ে যেতে, fedcm-idp-demo.localhost আপনার ব্যবহারকারীর নাম এবং ফোন নম্বর এই সাইটের সাথে শেয়ার করবে।'।
প্রকাশের বার্তা: আরপি আইডিপিকে শুধুমাত্র ব্যবহারকারীর নাম এবং ফোন নম্বর শেয়ার করার জন্য অনুরোধ করে।

Fields বৈশিষ্ট্যটি ব্যবহার করার জন্য, RP-কে navigator.credentials.get() কলে একটি fields অ্যারে যোগ করতে হবে। ক্ষেত্রগুলিতে name , email , tel , username , অথবা picture এর মতো বৈশিষ্ট্য থাকতে পারে। ভবিষ্যতে আরও মান অন্তর্ভুক্ত করার জন্য এটি প্রসারিত করা যেতে পারে। fields সহ একটি অনুরোধ এইরকম দেখাবে:

   let { token } = await navigator.credentials.get({
    identity: {
      providers: [{
        // RP requests the IdP to share only username and profile picture
        fields: [ 'username', 'picture'],
        clientId: '1234',
        configURL: 'https://idp.example/fedcm.json',
      },
    }
  });

ব্রাউজারটি স্বয়ংক্রিয়ভাবে এটিকে ID অ্যাসারশন এন্ডপয়েন্টে HTTP অনুরোধে রূপান্তর করবে যার মধ্যে RP-নির্দিষ্ট fields প্যারামিটার অন্তর্ভুক্ত থাকবে, ব্রাউজারটি disclosure_shown_for প্যারামিটারে ব্যবহারকারীর কাছে যে ক্ষেত্রগুলি প্রকাশ করেছিল সেগুলি সহ। ব্যাকওয়ার্ড সামঞ্জস্যের জন্য, ব্রাউজারটি disclosure_text_shown=true পাঠাবে যদি disclosure টেক্সটটি দেখানো হয় এবং অনুরোধকৃত ক্ষেত্রগুলিতে তিনটি ক্ষেত্র অন্তর্ভুক্ত থাকে: 'name' , 'email' , এবং 'picture' । Chrome 141 থেকে, disclosure_text_shown এর মান নির্দেশ করে না যে প্রকাশক টেক্সটটি আসলে ব্যবহারকারীর কাছে প্রদর্শিত হয়েছিল কিনা।

  POST /id_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

  // The RP only requested to share email and picture. The browser will send `disclosure_text_shown=false`, as the 'name' field value is missing
  account_id=123&client_id=client1234&disclosure_text_shown=false&fields=email,picture&disclosure_shown_for=email,picture

যদি fields একটি খালি অ্যারে হয়, তাহলে ব্যবহারকারী এজেন্ট ডিসক্লোজার UI এড়িয়ে যাবে।

একটি FedCM প্যাসিভ মোড ডায়ালগ যা কোনও ডিসক্লোজার UI বার্তা প্রদর্শন করে না।
প্রকাশের বার্তাটি প্যাসিভ মোডে প্রদর্শিত হয় না। বোতাম প্রবাহে, প্রকাশের UI সম্পূর্ণরূপে এড়িয়ে যায়।

এমনকি যদি অ্যাকাউন্টস এন্ডপয়েন্ট থেকে আসা প্রতিক্রিয়ায় approved_clients RP এর সাথে মেলে এমন কোনও ক্লায়েন্ট আইডি না থাকে, তবুও এটি প্রযোজ্য।

এই ক্ষেত্রে, আইডি অ্যাসারশন এন্ডপয়েন্টে পাঠানো disclosure_text_shown HTTP বডিতে মিথ্যা:

  POST /id_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=234234&disclosure_text_shown=false

একটি ত্রুটি বার্তা দেখান

কখনও কখনও, আইডিপি বৈধ কারণে টোকেন ইস্যু করতে সক্ষম নাও হতে পারে, যেমন যখন ক্লায়েন্ট অননুমোদিত থাকে, অথবা সার্ভার অস্থায়ীভাবে অনুপলব্ধ থাকে। যদি আইডিপি একটি "ত্রুটি" প্রতিক্রিয়া ফেরত দেয়, তাহলে RP এটি ধরতে পারে এবং ক্রোম আইডিপি দ্বারা প্রদত্ত ত্রুটি তথ্য সহ ব্রাউজার UI দেখিয়ে ব্যবহারকারীকে অবহিত করতে পারে।

ব্যবহারকারীর সাইন-ইন প্রচেষ্টা ব্যর্থ হওয়ার পরে ত্রুটির বার্তা দেখানো একটি FedCM ডায়ালগ। স্ট্রিংটি ত্রুটির ধরণের সাথে সম্পর্কিত।
ব্যবহারকারীর সাইন-ইন প্রচেষ্টা ব্যর্থ হওয়ার পরে ত্রুটির বার্তা দেখানো একটি 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-এর সাইন-ইন ডায়ালগে "চালিয়ে যান..." বোতামে ট্যাপ করে একটি অ্যাকাউন্ট তৈরি করেন বা RP-এর ওয়েবসাইটে সাইন ইন করেন।
  • ব্যবহারকারীর কেবল একটিই রিটার্নিং অ্যাকাউন্ট আছে। যদি একাধিক আইডিপির জন্য রিটার্নিং অ্যাকাউন্ট বিদ্যমান থাকে, তাহলে ব্যবহারকারী স্বয়ংক্রিয়ভাবে পুনরায় প্রমাণীকরণ করা হবে না।

যদিও ব্যবহারকারীর ফেডারেটেড অ্যাকাউন্ট তৈরি করার আগে স্পষ্ট ব্যবহারকারীর অভিজ্ঞতা অর্থবহ (যা FedCM-এর প্রধান লক্ষ্যগুলির মধ্যে একটি), ব্যবহারকারী একবার এটি পরীক্ষা করার পরে এটি অপ্রয়োজনীয়ভাবে জটিল হয়ে ওঠে: ব্যবহারকারী RP এবং IdP-এর মধ্যে যোগাযোগের অনুমতি দেওয়ার পরে, অন্য কোনও স্পষ্ট ব্যবহারকারীর নিশ্চিতকরণ প্রয়োগ করার জন্য কোনও গোপনীয়তা বা সুরক্ষা সুবিধা নেই যা তারা ইতিমধ্যেই স্বীকার করেছে।

auto-reauthn-এর মাধ্যমে, 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 Credential Management API-এর একটি সম্পত্তি , এটি PasswordCredential এবং FederatedCredential- এর মতোই আচরণ করে এবং এটি আংশিকভাবে PublicKeyCredential দ্বারাও সমর্থিত। সম্পত্তিটি নিম্নলিখিত চারটি মান গ্রহণ করে:

  • 'optional' (ডিফল্ট): সম্ভব হলে স্বয়ংক্রিয়ভাবে পুনঃপ্রমাণীকরণ করতে হবে, না হলে মধ্যস্থতার প্রয়োজন হবে। আমরা সাইন-ইন পৃষ্ঠায় এই বিকল্পটি বেছে নেওয়ার পরামর্শ দিচ্ছি।
  • 'required' : এগিয়ে যাওয়ার জন্য সর্বদা একটি মধ্যস্থতা প্রয়োজন, উদাহরণস্বরূপ, UI-তে "চালিয়ে যান" বোতামে ক্লিক করা। যদি আপনার ব্যবহারকারীরা প্রতিবার প্রমাণীকরণের প্রয়োজন হলে স্পষ্টভাবে অনুমতি দেবেন বলে আশা করা হচ্ছে, তাহলে এই বিকল্পটি বেছে নিন।
  • 'silent' : সম্ভব হলে স্বয়ংক্রিয়ভাবে প্রমাণীকরণ, যদি না হয় তবে মধ্যস্থতার প্রয়োজন ছাড়াই নীরবে ব্যর্থ। আমরা ডেডিকেটেড সাইন-ইন পৃষ্ঠা ব্যতীত অন্য পৃষ্ঠাগুলিতে এই বিকল্পটি বেছে নেওয়ার পরামর্শ দিচ্ছি, তবে যেখানে আপনি ব্যবহারকারীদের সাইন ইন রাখতে চান—উদাহরণস্বরূপ, শিপিং ওয়েবসাইটের একটি আইটেম পৃষ্ঠা বা একটি সংবাদ ওয়েবসাইটের একটি নিবন্ধ পৃষ্ঠা।
  • 'conditional' : WebAuthn-এর জন্য ব্যবহৃত এবং এই মুহূর্তে FedCM-এর জন্য উপলব্ধ নয়।

এই কলের মাধ্যমে, auto-reauthn নিম্নলিখিত শর্তাবলীর অধীনে ঘটে:

  • FedCM ব্যবহারের জন্য উপলব্ধ। উদাহরণস্বরূপ, ব্যবহারকারী বিশ্বব্যাপী বা সেটিংসে RP-এর জন্য FedCM অক্ষম করেননি।
  • এই ব্রাউজারে ওয়েবসাইটে সাইন ইন করার জন্য ব্যবহারকারী FedCM API সহ শুধুমাত্র একটি অ্যাকাউন্ট ব্যবহার করেছেন।
  • ব্যবহারকারী সেই অ্যাকাউন্ট দিয়ে আইডিপিতে সাইন ইন করেন।
  • গত ১০ মিনিটের মধ্যে স্বয়ংক্রিয়-পুনঃপ্রমাণকরণ ঘটেনি।
  • পূর্ববর্তী সাইন ইনের পরে RP navigator.credentials.preventSilentAccess() কল করেনি।

যখন এই শর্তগুলি পূরণ করা হয়, তখন FedCM navigator.credentials.get() চালু হওয়ার সাথে সাথে ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে পুনঃপ্রমাণিত করার প্রচেষ্টা শুরু হয়।

যখন mediation: optional , তখন auto-reauthn অনুপলব্ধ হতে পারে কারণ শুধুমাত্র ব্রাউজারই জানে; RP isAutoSelected প্রোপার্টি পরীক্ষা করে auto-reauthn সম্পাদিত হয়েছে কিনা তা পরীক্ষা করতে পারে।

এটি API কর্মক্ষমতা মূল্যায়ন করতে এবং সেই অনুযায়ী UX উন্নত করতে সহায়ক। এছাড়াও, যখন এটি অনুপলব্ধ থাকে, তখন ব্যবহারকারীকে স্পষ্ট ব্যবহারকারী মধ্যস্থতা দিয়ে সাইন ইন করতে বলা হতে পারে, যা mediation: required

একজন ব্যবহারকারী FedCM-এর মাধ্যমে স্বয়ংক্রিয়ভাবে পুনঃপ্রমাণীকরণ করছেন।

preventSilentAccess() ব্যবহার করে মধ্যস্থতা কার্যকর করুন

ব্যবহারকারীদের সাইন আউট করার সাথে সাথেই অটো-রিঅথেনটিক্স করলে ব্যবহারকারীর অভিজ্ঞতা খুব একটা ভালো হবে না। এই কারণেই এই আচরণ রোধ করার জন্য FedCM অটো-রিঅথেনটিক্সের পরে ১০ মিনিটের নীরব সময়কাল নির্ধারণ করে। এর অর্থ হল, ব্যবহারকারী ১০ মিনিটের মধ্যে সাইন ইন না করলে প্রতি ১০ মিনিটে সর্বোচ্চ একবার অটো-রিঅথেনটিক্স ঘটে। RP-এর উচিত navigator.credentials.preventSilentAccess() কল করে ব্রাউজারকে স্পষ্টভাবে অনুরোধ করা যে যখন কোনও ব্যবহারকারী RP থেকে স্পষ্টভাবে সাইন আউট করে, উদাহরণস্বরূপ, সাইন-আউট বোতামে ক্লিক করে অটো-রিঅথেনটিক্স বন্ধ করে দেওয়া।

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

ব্যবহারকারীরা সেটিংসে স্বয়ংক্রিয়-পুনঃপ্রমাণীকরণ অপ্ট-আউট করতে পারেন।

ব্যবহারকারীরা সেটিংস মেনু থেকে অটো-রিঅথ থেকে অপ্ট-আউট করতে পারেন:

  • ডেস্কটপ ক্রোমে, chrome://password-manager/settings > স্বয়ংক্রিয়ভাবে সাইন ইন করুন এ যান।
  • অ্যান্ড্রয়েড ক্রোমে, সেটিংস > পাসওয়ার্ড ম্যানেজার খুলুন > উপরের ডান কোণায় একটি কগ ট্যাপ করুন > অটো সাইন-ইন করুন।

টগলটি অক্ষম করে, ব্যবহারকারী স্বয়ংক্রিয়-পুনঃপ্রমাণ আচরণ থেকে অপ্ট-আউট করতে পারেন। ব্যবহারকারী যদি Chrome ইনস্ট্যান্সে একটি Google অ্যাকাউন্টে সাইন ইন করে থাকেন এবং সিঙ্ক্রোনাইজেশন সক্ষম থাকে, তাহলে এই সেটিংটি বিভিন্ন ডিভাইসে সংরক্ষণ এবং সিঙ্ক্রোনাইজ করা হয়।

RP থেকে IdP সংযোগ বিচ্ছিন্ন করুন

যদি কোনও ব্যবহারকারী পূর্বে FedCM এর মাধ্যমে IdP ব্যবহার করে RP-তে সাইন ইন করে থাকেন, তাহলে ব্রাউজার স্থানীয়ভাবে সংযুক্ত অ্যাকাউন্টের তালিকা হিসাবে সম্পর্কটি মুখস্থ করে। RP IdentityCredential.disconnect() ফাংশনটি ব্যবহার করে সংযোগ বিচ্ছিন্ন করতে পারে। এই ফাংশনটি একটি শীর্ষ-স্তরের RP ফ্রেম থেকে কল করা যেতে পারে। RP-কে একটি configURL , IdP-এর অধীনে এটি যে 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 ব্যবহার করে RP তে সাইন ইন করেননি।
  • FedCM অনুমতি নীতি ছাড়াই একটি iframe এর মধ্যে থেকে API চালু করা হয়।
  • configURLটি অবৈধ অথবা সংযোগ বিচ্ছিন্ন করার শেষ বিন্দুটি অনুপস্থিত।
  • কন্টেন্ট সিকিউরিটি পলিসি (CSP) চেক ব্যর্থ হয়েছে।
  • একটি সংযোগ বিচ্ছিন্ন করার অনুরোধ মুলতুবি আছে।
  • ব্যবহারকারী ব্রাউজার সেটিংসে FedCM নিষ্ক্রিয় করেছেন।

যখন IdP এর disconnect endpoint একটি প্রতিক্রিয়া প্রদান করে , তখন RP এবং IdP ব্রাউজারে সংযোগ বিচ্ছিন্ন হয়ে যায় এবং প্রতিশ্রুতি সমাধান করা হয়। disconnect endpoint থেকে প্রতিক্রিয়াতে সংযোগ বিচ্ছিন্ন অ্যাকাউন্টগুলির ID নির্দিষ্ট করা থাকে।