FedCM আপডেট: কন্টিনিউয়েশন এপিআই বান্ডেল এবং স্টোরেজ অ্যাক্সেস এপিআই স্বয়ংক্রিয় অনুদানের জন্য অরিজিন ট্রায়াল

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

অরিজিন ট্রায়াল: FedCM কন্টিনিউয়েশন এপিআই বান্ডেল

FedCM কন্টিনিউয়েশন API বান্ডেল একাধিক FedCM এক্সটেনশন নিয়ে গঠিত:

ধারাবাহিকতা API

একজন ব্যবহারকারী RP-তে সাইন ইন করছেন তারপর বোতাম মোডের মাধ্যমে অনুমোদন করছেন।

আপনি Glitch এ API এর একটি ডেমো পরীক্ষা করতে পারেন।

কন্টিনিউয়েশন এপিআই আইডিপি-এর আইডি অ্যাসারশন এন্ডপয়েন্টকে ঐচ্ছিকভাবে একটি ইউআরএল ফেরত দিতে দেয় যা FedCM ব্যবহারকারীকে বহু-ধাপে সাইন-ইন প্রবাহ চালিয়ে যেতে দেয়। এটি আইডিপিকে ব্যবহারকারীর সার্ভার-সাইড রিসোর্সে অ্যাক্সেসের মতো বিদ্যমান FedCM UI-তে যা সম্ভব তার বাইরে নির্ভরশীল পক্ষ (RP) অনুমতি দেওয়ার জন্য ব্যবহারকারীকে অনুরোধ করার অনুমতি দেয়।

সাধারণত, আইডি দাবী শেষ পয়েন্ট প্রমাণীকরণের জন্য প্রয়োজনীয় একটি টোকেন প্রদান করে।

{
  "token": "***********"
}

যাইহোক, Continuation API-এর সাথে, ID assertion endpoint একটি continue_on প্রপার্টি ফেরত দিতে পারে যার মধ্যে একটি পরম পাথ বা আইডি অ্যাসারশন এন্ডপয়েন্টের আপেক্ষিক পাথ রয়েছে।

{
  // In the id_assertion_endpoint, instead of returning a typical
  // "token" response, the IdP decides that it needs the user to
  // continue on a pop-up window:
  "continue_on": "/oauth/authorize?scope=..."
}

ব্রাউজারটি continue_on প্রতিক্রিয়া পাওয়ার সাথে সাথে একটি নতুন পপআপ উইন্ডো খোলা হয় এবং ব্যবহারকারীকে নির্দিষ্ট পথে নেভিগেট করে।

ব্যবহারকারী পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করার পরে, উদাহরণস্বরূপ RP-এর সাথে অতিরিক্ত তথ্য ভাগ করার জন্য আরও অনুমতি দেওয়ার পরে, IdP পৃষ্ঠাটি আসল navigator.credentials.get() IdentityProvider.resolve() () কল করতে পারে এবং একটি যুক্তি হিসাবে একটি টোকেন ফেরত দিতে পারে।

document.getElementById('allow_btn').addEventListener('click', async () => {
  let accessToken = await fetch('/generate_access_token.cgi');
  // Closes the window and resolves the promise (that is still hanging
  // in the relying party's renderer) with the value that is passed.
  IdentityProvider.resolve(accessToken);
});

ব্রাউজার তখন নিজেই পপআপ বন্ধ করবে এবং API কলারকে টোকেন ফিরিয়ে দেবে।

যদি ব্যবহারকারী অনুরোধটি প্রত্যাখ্যান করে, আপনি IdentityProvider.close() কল করে উইন্ডোটি বন্ধ করতে পারেন।

IdentityProvider.close();

যদি কোনো কারণে ব্যবহারকারী পপআপে তাদের অ্যাকাউন্ট পরিবর্তন করে থাকেন (উদাহরণস্বরূপ আইডিপি একটি "সুইচ ব্যবহারকারী" ফাংশন অফার করে, বা প্রতিনিধিত্বের ক্ষেত্রে), সমাধান কলটি একটি ঐচ্ছিক দ্বিতীয় যুক্তি নেয় যা কিছু করার অনুমতি দেয়:

IdentityProvider.resolve(token, {accountId: '1234');

পরামিতি API

প্যারামিটার এপিআই RP-কে আইডি অ্যাসারশন এন্ডপয়েন্টে অতিরিক্ত প্যারামিটার প্রদান করতে দেয়। পরামিতি API-এর সাহায্যে, RPs মৌলিক সাইন-ইন-এর বাইরে সংস্থানগুলির জন্য অনুমতির অনুরোধ করতে আইডিপি-তে অতিরিক্ত প্যারামিটার পাঠাতে পারে। ব্যবহারকারী এই অনুমতিগুলিকে একটি IdP-নিয়ন্ত্রিত UX প্রবাহের মাধ্যমে অনুমোদন করবে যা Continuation API-এর মাধ্যমে চালু হয়।

API ব্যবহার করতে, 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',
        ETC: 'MOAR',
        scope: 'calendar.readonly photos.write',
      }
    },
  }
});

params অবজেক্টের সম্পত্তির নাম param_ সাথে আগে লেখা হয়। উপরের উদাহরণে, প্যারামস প্রপার্টিতে IDP_SPECIFIC_PARAM '1' , foo 'BAR' হিসেবে, ETC 'MOAR' এবং scope 'calendar.readonly photos.write' হিসেবে রয়েছে। অনুরোধের HTTP বডিতে এটি param_IDP_SPECIFIC_PARAM=1&param_foo=BAR&param_ETC=MOAR&param_scope=calendar.readonly%20photos.write হিসাবে অনুবাদ করা হবে:

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=234234&disclosure_text_shown=false&param_IDP_SPECIFIC_PARAM=1&param_foo=BAR&param_ETC=MOAR&param_scope=calendar.readonly%20photos.write

গতিশীলভাবে অনুমতি পান

সাধারণভাবে, ব্যবহারকারীদের জন্য যখন তাদের প্রয়োজন হয় তখন অনুমতির জন্য অনুরোধ করা সবচেয়ে সহায়ক, যখন বিকাশকারী মনে করেন যে তারা বাস্তবায়ন করা সবচেয়ে সহজ। উদাহরণস্বরূপ, ব্যবহারকারী যখন একটি ছবি তুলতে চলেছেন তখন একটি ক্যামেরা অ্যাক্সেস করার অনুমতি চাওয়া হলে ব্যবহারকারী ওয়েবসাইটে অবতরণ করার সাথে সাথে অনুমতি চাওয়ার চেয়ে পছন্দ করেন৷ একই অনুশীলন সার্ভার সম্পদ প্রযোজ্য. অনুমতির জন্য অনুরোধ শুধুমাত্র যখন তারা ব্যবহারকারীর জন্য প্রয়োজন হয়. একে বলা হয় "গতিশীল অনুমোদন"।

FedCM এর সাথে গতিশীলভাবে অনুমোদনের অনুরোধ করতে, IdP করতে পারে:

  1. প্রয়োজনীয় প্যারামিটার সহ navigator.credentials.get() কল করুন IdP বুঝতে পারে, যেমন scope
  2. আইডি অ্যাসারশন এন্ডপয়েন্ট নিশ্চিত করে যে ব্যবহারকারী ইতিমধ্যেই সাইন ইন করেছেন এবং একটি continue_on URL দিয়ে প্রতিক্রিয়া জানায়৷
  3. ব্রাউজারটি IdP-এর অনুমতি পৃষ্ঠার সাথে একটি পপআপ উইন্ডো খোলে যাতে অনুরোধ করা স্কোপের সাথে মেলে অতিরিক্ত অনুমতি চাওয়া হয়।
  4. IdP দ্বারা IdentityProvider.resolve() এর মাধ্যমে অনুমোদিত হওয়ার পরে, উইন্ডোটি বন্ধ হয়ে যায় এবং RP-এর আসল navigator.credentials.get() কলটি একটি প্রাসঙ্গিক টোকেন বা একটি অনুমোদন কোড পায় যাতে RP এটি একটি সঠিক অ্যাক্সেস টোকেনের সাথে বিনিময় করতে পারে।

ক্ষেত্র API

ফিল্ডস এপিআই RP-কে আইডিপি থেকে অনুরোধ করার জন্য অ্যাকাউন্টের বৈশিষ্ট্যগুলি ঘোষণা করার অনুমতি দেয় যাতে ব্রাউজার FedCM ডায়ালগে একটি সঠিক প্রকাশ UI রেন্ডার করতে পারে; প্রত্যাবর্তিত টোকেনে অনুরোধ করা ক্ষেত্রগুলি অন্তর্ভুক্ত করার দায়িত্ব আইডিপির। OAuth-এ OpenID কানেক্ট বনাম "স্কোপ"-এ একটি "বেসিক প্রোফাইল" অনুরোধ করার বিষয়টি বিবেচনা করুন।

উইজেট মোডে প্রকাশের বার্তা।
উইজেট মোডে প্রকাশের বার্তা।
বোতাম মোডে প্রকাশের বার্তা।
বোতাম মোডে প্রকাশের বার্তা।

Fields API ব্যবহার করতে, navigator.credentials.get() কলে একটি অ্যারে হিসাবে fields সম্পত্তিতে প্যারামিটার যোগ করুন। ক্ষেত্রগুলিতে আপাতত 'name' , 'email' এবং 'picture' থাকতে পারে, তবে ভবিষ্যতে আরও মান অন্তর্ভুক্ত করার জন্য প্রসারিত করা যেতে পারে।

fields সাথে একটি অনুরোধ এইরকম দেখাবে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      fields: ['name', 'email', 'picture'],
      clientId: '1234',
      configURL: 'https://idp.example/fedcm.json',
      params: {
        scope: 'drive.readonly calendar.readonly',
      }
    },
  }
  mediation: 'optional',
});

আইডি অ্যাসারশন এন্ডপয়েন্টের HTTP অনুরোধে RP-নির্দিষ্ট fields প্যারামিটার অন্তর্ভুক্ত থাকে, যার সাথে disclosure_text_shown প্যারামিটারটি true হিসাবে সেট করা হয় যদি এটি একজন ফেরত ব্যবহারকারী না হয়, এবং ব্রাউজারটি একটি disclosure_shown_for প্যারামিটারে ব্যবহারকারীর কাছে যে ক্ষেত্রগুলি প্রকাশ করেছে:

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=true&fields=email,name,picture&disclosure_shown_for=email,name,picture

যদি RP-এর IdP থেকে কোনও অতিরিক্ত ডেটা অ্যাক্সেসের প্রয়োজন হয়, যেমন একটি ক্যালেন্ডারে অ্যাক্সেস, এটি উপরে উল্লিখিত হিসাবে একটি কাস্টম প্যারামিটার দিয়ে পরিচালনা করা উচিত। IdP অনুমতির অনুরোধ করার জন্য একটি continue_on URL প্রদান করে।

যদি fields একটি খালি অ্যারে হয় তবে অনুরোধটি এইরকম দেখাবে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      fields: [],
      clientId: '1234',
      configURL: 'https://idp.example/fedcm.json',
      params: {
        scope: 'drive.readonly calendar.readonly',
      }
    },
  }
  mediation: 'optional',
});

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

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

অ্যাকাউন্টের এন্ডপয়েন্টের প্রতিক্রিয়াতে approved_clients এ RP-এর সাথে মেলে এমন ক্লায়েন্ট আইডি না থাকলেও এটি হয়।

এই ক্ষেত্রে, ID assertion endpoint- এ পাঠানো 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

একাধিক কনফিগার URL

একাধিক কনফিগারেশন ইউআরএল আইডিপি-কে একটি আইডিপি-র জন্য একাধিক কনফিগারেশন ফাইলগুলিকে মিটমাট করার অনুমতি দেয়, কনফিগার ফাইলগুলির মতোই পরিচিত ফাইলে accounts_endpoint এবং login_url উল্লেখ করে।

যদি accounts_endpoint এবং login_url সুপরিচিত ফাইলে যোগ করা হয়, তাহলে provider_urls উপেক্ষা করা হয় যাতে IdP একাধিক কনফিগার ফাইল সমর্থন করতে পারে। যদি সেগুলি না থাকে, provider_urls কার্যকর হতে থাকে যাতে এটি পিছিয়ে সামঞ্জস্যপূর্ণ হয়৷

একাধিক কনফিগারেশন ইউআরএল সমর্থন করে এমন সুপরিচিত ফাইলটি এইরকম দেখতে পারে:

{
  "provider_urls": [ "https://idp.example/fedcm.json" ],
  "accounts_endpoint": "https://idp.example/accounts",
  "login_url": "https://idp.example/login"
}

এটি আমাদের অনুমতি দেয়:

  1. বিদ্যমান সুপরিচিত ফাইল এবং ইতিমধ্যেই বন্য অঞ্চলে স্থাপন করা ব্রাউজারগুলির পূর্ববর্তী সংস্করণগুলির সাথে পিছনের দিকে এবং ফরোয়ার্ডের সামঞ্জস্য বজায় রাখুন।
  2. কনফিগার ফাইলের একটি নির্বিচারে সংখ্যা আছে - যতক্ষণ না তারা সব একই accounts_endpoint এবং login_url নির্দেশ করে।
  3. accounts_endpoint করা শংসাপত্রযুক্ত আনার অনুরোধে এনট্রপি যোগ করার কোনো সুযোগ নেই, কারণ এটি ".সুপরিচিত" স্তরে নির্দিষ্ট করতে হবে।

একাধিক কনফিগারেশন ইউআরএল সমর্থন করা ঐচ্ছিক এবং বিদ্যমান FedCM বাস্তবায়ন একই থাকতে পারে।

কাস্টম অ্যাকাউন্ট লেবেল

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

উদাহরণ

একটি আইডিপি যথাক্রমে ভোক্তা এবং এন্টারপ্রাইজের জন্য দুটি কনফিগারেশন ইউআরএল সমর্থন করে। ভোক্তা কনফিগার ফাইলটিতে একটি 'consumer' লেবেল রয়েছে এবং এন্টারপ্রাইজ কনফিগারেশন ফাইলটিতে একটি 'enterprise' লেবেল রয়েছে।

এই ধরনের সেটআপের সাথে, সুপরিচিত ফাইলটিতে একাধিক কনফিগারেশন ইউআরএলের অনুমতি দেওয়ার জন্য accounts_endpoint এবং login_url অন্তর্ভুক্ত থাকে।

{
  "provider_urls": [ "https://idp.example/fedcm.json" ],
  "accounts_endpoint": "https://idp.example/accounts",
  "login_url": "https://idp.example/login"
}

যখন accounts_endpoint সুপরিচিত ফাইলে প্রদান করা হয়, provider_urls উপেক্ষা করা হয়। RP সরাসরি navigator.credentials.get() কলে সংশ্লিষ্ট কনফিগার ফাইলের দিকে নির্দেশ করতে পারে।

ভোক্তা কনফিগার ফাইলটি https://idp.example/fedcm.json এ রয়েছে যা accounts সম্পত্তি অন্তর্ভুক্ত করে যা include ব্যবহার করে 'consumer' নির্দিষ্ট করে।

{
  "accounts_endpoint": "https://idp.example/accounts",
  "client_metadata_endpoint": "/client_metadata",
  "login_url": "https://idp.example/login",
  "id_assertion_endpoint": "/assertion",
  "accounts": {
    "include": "consumer"
  }
}

এন্টারপ্রাইজ কনফিগার ফাইলটি https://idp.example/enterprise/fedcm.json এ রয়েছে, এতে accounts বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে যা include ব্যবহার করে 'enterprise' নির্দিষ্ট করে।

{
  "accounts_endpoint": "https://idp.example/accounts",
  "client_metadata_endpoint": "/enterprise/client_metadata",
  "login_url": "https://idp.example/login",
  "id_assertion_endpoint": "/assertion",
  "accounts": {
    "include": "enterprise"
  }
}

সাধারণ আইডিপি অ্যাকাউন্টের এন্ডপয়েন্ট (এই উদাহরণে https://idp.example/accounts ) অ্যাকাউন্টগুলির একটি তালিকা প্রদান করে যাতে প্রতিটি অ্যাকাউন্টের জন্য একটি অ্যারেতে অ্যাসাইন করা labels সহ একটি লেবেল বৈশিষ্ট্য অন্তর্ভুক্ত থাকে। নিম্নলিখিত একটি ব্যবহারকারীর জন্য একটি উদাহরণ প্রতিক্রিয়া যার দুটি অ্যাকাউন্ট আছে৷ একটি ভোক্তার জন্য এবং অন্যটি এন্টারপ্রাইজের জন্য:

{
 "accounts": [{
   "id": "123",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "labels": ["consumer"]
  }], [{
   "id": "4567",
   "given_name": "Jane",
   "name": "Jane Doe",
   "email": "jane_doe@idp.example",
   "picture": "https://idp.example/profile/4567",
   "labels": ["enterprise"]
  }]
}

যখন কোনো RP 'enterprise' ব্যবহারকারীদের সাইন ইন করার অনুমতি দিতে চায়, তখন তারা navigator.credentials.get() কলে 'enterprise' কনফিগার URL 'https://idp.example/enterprise/fedcm.json' নির্দিষ্ট করতে পারে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      clientId: '1234',
      nonce: '234234',
      configURL: 'https://idp.example/enterprise/fedcm.json',
    },
  }
});

ফলস্বরূপ, ব্যবহারকারীর সাইন ইন করার জন্য শুধুমাত্র '4567' -এর অ্যাকাউন্ট আইডি উপলব্ধ। '123' এর অ্যাকাউন্ট আইডি ব্রাউজার দ্বারা নিঃশব্দে লুকানো থাকে যাতে ব্যবহারকারীকে এই সাইটে আইডিপি দ্বারা সমর্থিত নয় এমন একটি অ্যাকাউন্ট সরবরাহ করা হবে না।

অরিজিন ট্রায়াল: FedCM স্টোরেজ অ্যাক্সেস API এর জন্য একটি বিশ্বাস সংকেত হিসাবে

Chrome 126 স্টোরেজ অ্যাক্সেস API-এর জন্য একটি বিশ্বস্ত সংকেত হিসাবে FedCM- এর একটি অরিজিন ট্রায়াল শুরু করছে৷ এই পরিবর্তনের সাথে, FedCM এর মাধ্যমে একটি পূর্বানুমতি অনুদান স্বয়ংক্রিয়ভাবে স্টোরেজ অ্যাক্সেস API-এর দ্বারা একটি স্টোরেজ অ্যাক্সেস অনুরোধ অনুমোদন করার একটি বৈধ কারণ হয়ে ওঠে।

যখন একটি এমবেডেড আইফ্রেম ব্যক্তিগতকৃত সংস্থানগুলি অ্যাক্সেস করতে চায় তখন এটি কার্যকর হয়: উদাহরণস্বরূপ, যদি idp.example rp.example এ এমবেড করা থাকে এবং একটি ব্যক্তিগতকৃত সংস্থান দেখাতে হয়৷ যদি ব্রাউজার তৃতীয় পক্ষের কুকিগুলিতে অ্যাক্সেস সীমাবদ্ধ করে, এমনকি ব্যবহারকারী FedCM এর সাথে idp.example ব্যবহার করে rp.example-এ সাইন ইন করলেও, এমবেড করা idp.example iframe ব্যক্তিগতকৃত সংস্থানগুলির অনুরোধ করতে সক্ষম হবে না কারণ অনুরোধগুলি তৃতীয় পক্ষের কুকিগুলি অন্তর্ভুক্ত করবে না৷

এটি অর্জনের জন্য, idp.example-এর ওয়েবসাইটে এম্বেড করা আইফ্রেম এর মাধ্যমে স্টোরেজ অ্যাক্সেসের অনুমতি পেতে হবে এবং এটি শুধুমাত্র একটি অনুমতি প্রম্পটের মাধ্যমে পাওয়া যেতে পারে।

FedCM-এর সাথে স্টোরেজ অ্যাক্সেস এপিআই-এর জন্য একটি ট্রাস্ট সিগন্যাল হিসেবে , স্টোরেজ অ্যাক্সেস API অনুমতি চেক শুধুমাত্র একটি স্টোরেজ অ্যাক্সেস প্রম্পট দ্বারা প্রদত্ত অনুমতি মঞ্জুরি গ্রহণ করে না, তবে একটি FedCM প্রম্পট দ্বারা প্রদত্ত অনুমতি মঞ্জুরিও গ্রহণ করে।

// In top-level rp.example:

// Ensure FedCM permission has been granted.
const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://idp.example/fedcm.json',
      clientId: '123',
    }],
  },
  mediation: 'optional',
});

// In an embedded IdP iframe:

// No user gesture is needed to call this, and the call will be auto-granted.
await document.requestStorageAccess();

// This returns `true`.
const hasAccess = await document.hasStorageAccess();

একবার ব্যবহারকারী FedCM এর সাথে সাইন ইন করলে, FedCM প্রমাণীকরণ সক্রিয় থাকা পর্যন্ত অনুমতি স্বয়ংক্রিয়ভাবে মঞ্জুর করা হয়। এর মানে একবার ব্যবহারকারীর সংযোগ বিচ্ছিন্ন হয়ে গেলে, অনুমতির অনুরোধ করা একটি প্রম্পট দেখাবে।

মূল বিচারে অংশগ্রহণ করুন

আপনি Chrome 126 বা তার পরে একটি Chrome পতাকা chrome://flags#fedcm-authz চালু করে স্থানীয়ভাবে FedCM Continuation API বান্ডেল চেষ্টা করতে পারেন। এছাড়াও আপনি Chrome 126 বা পরবর্তীতে #fedcm-with-storage-access-api চালু করে স্থানীয়ভাবে স্টোরেজ অ্যাক্সেস API-এর জন্য একটি বিশ্বস্ত সংকেত হিসাবে FedCM ব্যবহার করে দেখতে পারেন।

এই বৈশিষ্ট্যগুলি অরিজিন ট্রায়াল হিসাবেও উপলব্ধ। অরিজিন ট্রায়ালগুলি আপনাকে নতুন বৈশিষ্ট্যগুলি চেষ্টা করার এবং তাদের ব্যবহারযোগ্যতা, ব্যবহারিকতা এবং কার্যকারিতা সম্পর্কে প্রতিক্রিয়া জানাতে দেয়। আরও তথ্যের জন্য, মূল ট্রায়াল দিয়ে শুরু করুন দেখুন।

FedCM Continuation API বান্ডেল অরিজিন ট্রায়াল চেষ্টা করতে, দুটি অরিজিন ট্রায়াল টোকেন তৈরি করুন:

আপনি যদি বোতাম ফ্লো সহ কন্টিনিউয়েশন API সক্রিয় করতে আগ্রহী হন তবে বোতাম মোড API অরিজিন ট্রায়ালও সক্ষম করুন:

স্টোরেজ অ্যাক্সেস API অরিজিন ট্রায়ালের জন্য একটি বিশ্বস্ত সংকেত হিসাবে FedCM চেষ্টা করতে:

কন্টিনিউয়েশন এপিআই বান্ডেল অরিজিন ট্রায়াল এবং স্টোরেজ অ্যাক্সেস এপিআই অরিজিন ট্রায়ালের ট্রাস্ট সিগন্যাল হিসেবে FedCM Chrome 126 থেকে পাওয়া যায়।

RP-এর জন্য একটি তৃতীয় পক্ষের মূল ট্রায়াল নিবন্ধন করুন

  1. অরিজিন ট্রায়াল রেজিস্ট্রেশন পেজে যান।
  2. রেজিস্টার বোতামে ক্লিক করুন এবং একটি টোকেন অনুরোধ করতে ফর্মটি পূরণ করুন।
  3. ওয়েব অরিজিন হিসাবে আইডিপির উত্স লিখুন৷
  4. অন্যান্য উত্সগুলিতে জাভাস্ক্রিপ্টের সাথে টোকেন ইনজেক্ট করতে তৃতীয় পক্ষের মিল পরীক্ষা করুন৷
  5. জমা দিন ক্লিক করুন.
  6. একটি তৃতীয় পক্ষের ওয়েবসাইটে জারি করা টোকেন এম্বেড করুন।

একটি তৃতীয় পক্ষের ওয়েবসাইটে টোকেনটি এম্বেড করতে, IdP এর জাভাস্ক্রিপ্ট লাইব্রেরিতে নিম্নলিখিত কোডটি যোগ করুন বা IdP এর উত্স থেকে পরিবেশিত SDK৷

const tokenElement = document.createElement('meta');
tokenElement.httpEquiv = 'origin-trial';
tokenElement.content = 'TOKEN_GOES_HERE';
document.head.appendChild(tokenElement);

আপনার নিজের টোকেন দিয়ে TOKEN_GOES_HERE প্রতিস্থাপন করুন।

,

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

অরিজিন ট্রায়াল: FedCM কন্টিনিউয়েশন এপিআই বান্ডেল

FedCM কন্টিনিউয়েশন API বান্ডেল একাধিক FedCM এক্সটেনশন নিয়ে গঠিত:

ধারাবাহিকতা API

একজন ব্যবহারকারী RP-তে সাইন ইন করছেন তারপর বোতাম মোডের মাধ্যমে অনুমোদন করছেন।

আপনি Glitch এ API এর একটি ডেমো পরীক্ষা করতে পারেন।

কন্টিনিউয়েশন এপিআই আইডিপি-এর আইডি অ্যাসারশন এন্ডপয়েন্টকে ঐচ্ছিকভাবে একটি ইউআরএল ফেরত দিতে দেয় যা FedCM ব্যবহারকারীকে বহু-ধাপে সাইন-ইন প্রবাহ চালিয়ে যেতে দেয়। এটি আইডিপিকে ব্যবহারকারীর সার্ভার-সাইড রিসোর্সে অ্যাক্সেসের মতো বিদ্যমান FedCM UI-তে যা সম্ভব তার বাইরে নির্ভরশীল পক্ষ (RP) অনুমতি দেওয়ার জন্য ব্যবহারকারীকে অনুরোধ করার অনুমতি দেয়।

সাধারণত, আইডি দাবী শেষ পয়েন্ট প্রমাণীকরণের জন্য প্রয়োজনীয় একটি টোকেন প্রদান করে।

{
  "token": "***********"
}

যাইহোক, Continuation API-এর সাথে, ID assertion endpoint একটি continue_on প্রপার্টি ফেরত দিতে পারে যার মধ্যে একটি পরম পাথ বা আইডি অ্যাসারশন এন্ডপয়েন্টের আপেক্ষিক পাথ রয়েছে।

{
  // In the id_assertion_endpoint, instead of returning a typical
  // "token" response, the IdP decides that it needs the user to
  // continue on a pop-up window:
  "continue_on": "/oauth/authorize?scope=..."
}

ব্রাউজারটি continue_on প্রতিক্রিয়া পাওয়ার সাথে সাথে একটি নতুন পপআপ উইন্ডো খোলা হয় এবং ব্যবহারকারীকে নির্দিষ্ট পথে নেভিগেট করে।

ব্যবহারকারী পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করার পরে, উদাহরণস্বরূপ RP-এর সাথে অতিরিক্ত তথ্য ভাগ করার জন্য আরও অনুমতি দেওয়ার পরে, IdP পৃষ্ঠাটি আসল navigator.credentials.get() IdentityProvider.resolve() () কল করতে পারে এবং একটি যুক্তি হিসাবে একটি টোকেন ফেরত দিতে পারে।

document.getElementById('allow_btn').addEventListener('click', async () => {
  let accessToken = await fetch('/generate_access_token.cgi');
  // Closes the window and resolves the promise (that is still hanging
  // in the relying party's renderer) with the value that is passed.
  IdentityProvider.resolve(accessToken);
});

ব্রাউজার তখন নিজেই পপআপ বন্ধ করবে এবং API কলারকে টোকেন ফিরিয়ে দেবে।

যদি ব্যবহারকারী অনুরোধটি প্রত্যাখ্যান করে, আপনি IdentityProvider.close() কল করে উইন্ডোটি বন্ধ করতে পারেন।

IdentityProvider.close();

যদি কোনো কারণে ব্যবহারকারী পপআপে তাদের অ্যাকাউন্ট পরিবর্তন করে থাকেন (উদাহরণস্বরূপ আইডিপি একটি "সুইচ ব্যবহারকারী" ফাংশন অফার করে, বা প্রতিনিধিত্বের ক্ষেত্রে), সমাধান কলটি একটি ঐচ্ছিক দ্বিতীয় যুক্তি নেয় যা কিছু করার অনুমতি দেয়:

IdentityProvider.resolve(token, {accountId: '1234');

পরামিতি API

প্যারামিটার এপিআই RP-কে আইডি অ্যাসারশন এন্ডপয়েন্টে অতিরিক্ত প্যারামিটার প্রদান করতে দেয়। পরামিতি API-এর সাহায্যে, RPs মৌলিক সাইন-ইন-এর বাইরে সংস্থানগুলির জন্য অনুমতির অনুরোধ করতে আইডিপি-তে অতিরিক্ত প্যারামিটার পাঠাতে পারে। ব্যবহারকারী এই অনুমতিগুলিকে একটি IdP-নিয়ন্ত্রিত UX প্রবাহের মাধ্যমে অনুমোদন করবে যা Continuation API-এর মাধ্যমে চালু হয়।

API ব্যবহার করতে, 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',
        ETC: 'MOAR',
        scope: 'calendar.readonly photos.write',
      }
    },
  }
});

params অবজেক্টের সম্পত্তির নাম param_ সাথে আগে লেখা হয়। উপরের উদাহরণে, প্যারামস প্রপার্টিতে IDP_SPECIFIC_PARAM '1' , foo 'BAR' হিসেবে, ETC 'MOAR' এবং scope 'calendar.readonly photos.write' হিসেবে রয়েছে। অনুরোধের HTTP বডিতে এটি param_IDP_SPECIFIC_PARAM=1&param_foo=BAR&param_ETC=MOAR&param_scope=calendar.readonly%20photos.write হিসাবে অনুবাদ করা হবে:

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=234234&disclosure_text_shown=false&param_IDP_SPECIFIC_PARAM=1&param_foo=BAR&param_ETC=MOAR&param_scope=calendar.readonly%20photos.write

গতিশীলভাবে অনুমতি পান

সাধারণভাবে, ব্যবহারকারীদের জন্য যখন তাদের প্রয়োজন হয় তখন অনুমতির জন্য অনুরোধ করা সবচেয়ে সহায়ক, যখন বিকাশকারী মনে করেন যে তারা বাস্তবায়ন করা সবচেয়ে সহজ। উদাহরণস্বরূপ, ব্যবহারকারী যখন একটি ছবি তুলতে চলেছেন তখন একটি ক্যামেরা অ্যাক্সেস করার অনুমতি চাওয়া হলে ব্যবহারকারী ওয়েবসাইটে অবতরণ করার সাথে সাথে অনুমতি চাওয়ার চেয়ে পছন্দ করেন৷ একই অনুশীলন সার্ভার সম্পদ প্রযোজ্য. অনুমতির জন্য অনুরোধ শুধুমাত্র যখন তারা ব্যবহারকারীর জন্য প্রয়োজন হয়. একে বলা হয় "গতিশীল অনুমোদন"।

FedCM এর সাথে গতিশীলভাবে অনুমোদনের অনুরোধ করতে, IdP করতে পারে:

  1. প্রয়োজনীয় প্যারামিটার সহ navigator.credentials.get() কল করুন IdP বুঝতে পারে, যেমন scope
  2. আইডি অ্যাসারশন এন্ডপয়েন্ট নিশ্চিত করে যে ব্যবহারকারী ইতিমধ্যেই সাইন ইন করেছেন এবং একটি continue_on URL দিয়ে প্রতিক্রিয়া জানায়৷
  3. ব্রাউজারটি IdP-এর অনুমতি পৃষ্ঠার সাথে একটি পপআপ উইন্ডো খোলে যাতে অনুরোধ করা স্কোপের সাথে মেলে অতিরিক্ত অনুমতি চাওয়া হয়।
  4. IdP দ্বারা IdentityProvider.resolve() এর মাধ্যমে অনুমোদিত হওয়ার পরে, উইন্ডোটি বন্ধ হয়ে যায় এবং RP-এর আসল navigator.credentials.get() কলটি একটি প্রাসঙ্গিক টোকেন বা একটি অনুমোদন কোড পায় যাতে RP এটি একটি সঠিক অ্যাক্সেস টোকেনের সাথে বিনিময় করতে পারে।

ক্ষেত্র API

ফিল্ডস এপিআই RP-কে আইডিপি থেকে অনুরোধ করার জন্য অ্যাকাউন্টের বৈশিষ্ট্যগুলি ঘোষণা করার অনুমতি দেয় যাতে ব্রাউজার FedCM ডায়ালগে একটি সঠিক প্রকাশ UI রেন্ডার করতে পারে; প্রত্যাবর্তিত টোকেনে অনুরোধ করা ক্ষেত্রগুলি অন্তর্ভুক্ত করার দায়িত্ব আইডিপির। OAuth-এ OpenID কানেক্ট বনাম "স্কোপ"-এ একটি "বেসিক প্রোফাইল" অনুরোধ করার বিষয়টি বিবেচনা করুন।

উইজেট মোডে প্রকাশের বার্তা।
উইজেট মোডে প্রকাশের বার্তা।
বোতাম মোডে প্রকাশের বার্তা।
বোতাম মোডে প্রকাশের বার্তা।

Fields API ব্যবহার করতে, navigator.credentials.get() কলে একটি অ্যারে হিসাবে fields সম্পত্তিতে প্যারামিটার যোগ করুন। ক্ষেত্রগুলিতে আপাতত 'name' , 'email' এবং 'picture' থাকতে পারে, তবে ভবিষ্যতে আরও মান অন্তর্ভুক্ত করার জন্য প্রসারিত করা যেতে পারে।

fields সাথে একটি অনুরোধ এইরকম দেখাবে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      fields: ['name', 'email', 'picture'],
      clientId: '1234',
      configURL: 'https://idp.example/fedcm.json',
      params: {
        scope: 'drive.readonly calendar.readonly',
      }
    },
  }
  mediation: 'optional',
});

আইডি অ্যাসারশন এন্ডপয়েন্টের HTTP অনুরোধে RP-নির্দিষ্ট fields প্যারামিটার অন্তর্ভুক্ত থাকে, যার সাথে disclosure_text_shown প্যারামিটারটি true হিসাবে সেট করা হয় যদি এটি একজন ফেরত ব্যবহারকারী না হয়, এবং ব্রাউজারটি একটি disclosure_shown_for প্যারামিটারে ব্যবহারকারীর কাছে যে ক্ষেত্রগুলি প্রকাশ করেছে:

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=true&fields=email,name,picture&disclosure_shown_for=email,name,picture

যদি RP-এর IdP থেকে কোনও অতিরিক্ত ডেটা অ্যাক্সেসের প্রয়োজন হয়, যেমন একটি ক্যালেন্ডারে অ্যাক্সেস, এটি উপরে উল্লিখিত হিসাবে একটি কাস্টম প্যারামিটার দিয়ে পরিচালনা করা উচিত। IdP অনুমতির অনুরোধ করার জন্য একটি continue_on URL প্রদান করে।

যদি fields একটি খালি অ্যারে হয় তবে অনুরোধটি এইরকম দেখাবে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      fields: [],
      clientId: '1234',
      configURL: 'https://idp.example/fedcm.json',
      params: {
        scope: 'drive.readonly calendar.readonly',
      }
    },
  }
  mediation: 'optional',
});

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

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

অ্যাকাউন্টের এন্ডপয়েন্টের প্রতিক্রিয়াতে approved_clients এ RP-এর সাথে মেলে এমন ক্লায়েন্ট আইডি না থাকলেও এটি হয়।

এই ক্ষেত্রে, ID assertion endpoint- এ পাঠানো 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

একাধিক কনফিগার URL

একাধিক কনফিগারেশন ইউআরএল আইডিপি-কে একটি আইডিপি-র জন্য একাধিক কনফিগারেশন ফাইলগুলিকে মিটমাট করার অনুমতি দেয়, কনফিগার ফাইলগুলির মতোই পরিচিত ফাইলে accounts_endpoint এবং login_url উল্লেখ করে।

যদি accounts_endpoint এবং login_url সুপরিচিত ফাইলে যোগ করা হয়, তাহলে provider_urls উপেক্ষা করা হয় যাতে IdP একাধিক কনফিগার ফাইল সমর্থন করতে পারে। যদি সেগুলি না থাকে, provider_urls কার্যকর হতে থাকে যাতে এটি পিছিয়ে সামঞ্জস্যপূর্ণ হয়৷

একাধিক কনফিগারেশন ইউআরএল সমর্থন করে এমন সুপরিচিত ফাইলটি এইরকম দেখতে পারে:

{
  "provider_urls": [ "https://idp.example/fedcm.json" ],
  "accounts_endpoint": "https://idp.example/accounts",
  "login_url": "https://idp.example/login"
}

এটি আমাদের অনুমতি দেয়:

  1. বিদ্যমান সুপরিচিত ফাইল এবং ইতিমধ্যেই বন্য অঞ্চলে স্থাপন করা ব্রাউজারগুলির পূর্ববর্তী সংস্করণগুলির সাথে পিছনের দিকে এবং ফরোয়ার্ডের সামঞ্জস্য বজায় রাখুন।
  2. কনফিগার ফাইলের একটি নির্বিচারে সংখ্যা আছে - যতক্ষণ না তারা সব একই accounts_endpoint এবং login_url নির্দেশ করে।
  3. accounts_endpoint করা শংসাপত্রযুক্ত আনার অনুরোধে এনট্রপি যোগ করার কোনো সুযোগ নেই, কারণ এটি ".সুপরিচিত" স্তরে নির্দিষ্ট করতে হবে।

একাধিক কনফিগারেশন ইউআরএল সমর্থন করা ঐচ্ছিক এবং বিদ্যমান FedCM বাস্তবায়ন একই থাকতে পারে।

কাস্টম অ্যাকাউন্ট লেবেল

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

উদাহরণ

একটি আইডিপি যথাক্রমে ভোক্তা এবং এন্টারপ্রাইজের জন্য দুটি কনফিগারেশন ইউআরএল সমর্থন করে। ভোক্তা কনফিগার ফাইলটিতে একটি 'consumer' লেবেল রয়েছে এবং এন্টারপ্রাইজ কনফিগারেশন ফাইলটিতে একটি 'enterprise' লেবেল রয়েছে।

এই ধরনের সেটআপের সাথে, সুপরিচিত ফাইলটিতে একাধিক কনফিগারেশন ইউআরএলের অনুমতি দেওয়ার জন্য accounts_endpoint এবং login_url অন্তর্ভুক্ত থাকে।

{
  "provider_urls": [ "https://idp.example/fedcm.json" ],
  "accounts_endpoint": "https://idp.example/accounts",
  "login_url": "https://idp.example/login"
}

যখন accounts_endpoint সুপরিচিত ফাইলে প্রদান করা হয়, provider_urls উপেক্ষা করা হয়। RP সরাসরি navigator.credentials.get() কলে সংশ্লিষ্ট কনফিগার ফাইলের দিকে নির্দেশ করতে পারে।

ভোক্তা কনফিগার ফাইলটি https://idp.example/fedcm.json এ রয়েছে যা accounts সম্পত্তি অন্তর্ভুক্ত করে যা include ব্যবহার করে 'consumer' নির্দিষ্ট করে।

{
  "accounts_endpoint": "https://idp.example/accounts",
  "client_metadata_endpoint": "/client_metadata",
  "login_url": "https://idp.example/login",
  "id_assertion_endpoint": "/assertion",
  "accounts": {
    "include": "consumer"
  }
}

এন্টারপ্রাইজ কনফিগার ফাইলটি https://idp.example/enterprise/fedcm.json এ রয়েছে, এতে accounts বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে যা include ব্যবহার করে 'enterprise' নির্দিষ্ট করে।

{
  "accounts_endpoint": "https://idp.example/accounts",
  "client_metadata_endpoint": "/enterprise/client_metadata",
  "login_url": "https://idp.example/login",
  "id_assertion_endpoint": "/assertion",
  "accounts": {
    "include": "enterprise"
  }
}

সাধারণ আইডিপি অ্যাকাউন্টের এন্ডপয়েন্ট (এই উদাহরণে https://idp.example/accounts ) অ্যাকাউন্টগুলির একটি তালিকা প্রদান করে যাতে প্রতিটি অ্যাকাউন্টের জন্য একটি অ্যারেতে অ্যাসাইন করা labels সহ একটি লেবেল বৈশিষ্ট্য অন্তর্ভুক্ত থাকে। নিম্নলিখিত একটি ব্যবহারকারীর জন্য একটি উদাহরণ প্রতিক্রিয়া যার দুটি অ্যাকাউন্ট আছে৷ একটি ভোক্তার জন্য এবং অন্যটি এন্টারপ্রাইজের জন্য:

{
 "accounts": [{
   "id": "123",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "labels": ["consumer"]
  }], [{
   "id": "4567",
   "given_name": "Jane",
   "name": "Jane Doe",
   "email": "jane_doe@idp.example",
   "picture": "https://idp.example/profile/4567",
   "labels": ["enterprise"]
  }]
}

যখন কোনো RP 'enterprise' ব্যবহারকারীদের সাইন ইন করার অনুমতি দিতে চায়, তখন তারা navigator.credentials.get() কলে 'enterprise' কনফিগার URL 'https://idp.example/enterprise/fedcm.json' নির্দিষ্ট করতে পারে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      clientId: '1234',
      nonce: '234234',
      configURL: 'https://idp.example/enterprise/fedcm.json',
    },
  }
});

ফলস্বরূপ, ব্যবহারকারীর সাইন ইন করার জন্য শুধুমাত্র '4567' -এর অ্যাকাউন্ট আইডি উপলব্ধ। '123' এর অ্যাকাউন্ট আইডি ব্রাউজার দ্বারা নিঃশব্দে লুকানো থাকে যাতে ব্যবহারকারীকে এই সাইটে আইডিপি দ্বারা সমর্থিত নয় এমন একটি অ্যাকাউন্ট সরবরাহ করা হবে না।

অরিজিন ট্রায়াল: FedCM স্টোরেজ অ্যাক্সেস API এর জন্য একটি বিশ্বাস সংকেত হিসাবে

Chrome 126 স্টোরেজ অ্যাক্সেস API-এর জন্য একটি বিশ্বস্ত সংকেত হিসাবে FedCM- এর একটি অরিজিন ট্রায়াল শুরু করছে৷ এই পরিবর্তনের সাথে, FedCM এর মাধ্যমে একটি পূর্বানুমতি অনুদান স্বয়ংক্রিয়ভাবে স্টোরেজ অ্যাক্সেস API-এর দ্বারা একটি স্টোরেজ অ্যাক্সেস অনুরোধ অনুমোদন করার একটি বৈধ কারণ হয়ে ওঠে।

যখন একটি এমবেডেড আইফ্রেম ব্যক্তিগতকৃত সংস্থানগুলি অ্যাক্সেস করতে চায় তখন এটি কার্যকর হয়: উদাহরণস্বরূপ, যদি idp.example rp.example এ এমবেড করা থাকে এবং একটি ব্যক্তিগতকৃত সংস্থান দেখাতে হয়৷ যদি ব্রাউজার তৃতীয় পক্ষের কুকিগুলিতে অ্যাক্সেস সীমাবদ্ধ করে, এমনকি ব্যবহারকারী FedCM এর সাথে idp.example ব্যবহার করে rp.example-এ সাইন ইন করলেও, এমবেড করা idp.example iframe ব্যক্তিগতকৃত সংস্থানগুলির অনুরোধ করতে সক্ষম হবে না কারণ অনুরোধগুলি তৃতীয় পক্ষের কুকিগুলি অন্তর্ভুক্ত করবে না৷

এটি অর্জনের জন্য, idp.example-এর ওয়েবসাইটে এম্বেড করা আইফ্রেম এর মাধ্যমে স্টোরেজ অ্যাক্সেসের অনুমতি পেতে হবে এবং এটি শুধুমাত্র একটি অনুমতি প্রম্পটের মাধ্যমে পাওয়া যেতে পারে।

FedCM-এর সাথে স্টোরেজ অ্যাক্সেস এপিআই-এর জন্য একটি ট্রাস্ট সিগন্যাল হিসেবে , স্টোরেজ অ্যাক্সেস API অনুমতি চেক শুধুমাত্র একটি স্টোরেজ অ্যাক্সেস প্রম্পট দ্বারা প্রদত্ত অনুমতি মঞ্জুরি গ্রহণ করে না, তবে একটি FedCM প্রম্পট দ্বারা প্রদত্ত অনুমতি মঞ্জুরিও গ্রহণ করে।

// In top-level rp.example:

// Ensure FedCM permission has been granted.
const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://idp.example/fedcm.json',
      clientId: '123',
    }],
  },
  mediation: 'optional',
});

// In an embedded IdP iframe:

// No user gesture is needed to call this, and the call will be auto-granted.
await document.requestStorageAccess();

// This returns `true`.
const hasAccess = await document.hasStorageAccess();

একবার ব্যবহারকারী FedCM এর সাথে সাইন ইন করলে, FedCM প্রমাণীকরণ সক্রিয় থাকা পর্যন্ত অনুমতি স্বয়ংক্রিয়ভাবে মঞ্জুর করা হয়। এর মানে একবার ব্যবহারকারীর সংযোগ বিচ্ছিন্ন হয়ে গেলে, অনুমতির অনুরোধ করা একটি প্রম্পট দেখাবে।

মূল বিচারে অংশগ্রহণ করুন

আপনি Chrome 126 বা তার পরে একটি Chrome পতাকা chrome://flags#fedcm-authz চালু করে স্থানীয়ভাবে FedCM Continuation API বান্ডেল চেষ্টা করতে পারেন। এছাড়াও আপনি Chrome 126 বা পরবর্তীতে #fedcm-with-storage-access-api চালু করে স্থানীয়ভাবে স্টোরেজ অ্যাক্সেস API-এর জন্য একটি বিশ্বস্ত সংকেত হিসাবে FedCM ব্যবহার করে দেখতে পারেন।

এই বৈশিষ্ট্যগুলি অরিজিন ট্রায়াল হিসাবেও উপলব্ধ। অরিজিন ট্রায়ালগুলি আপনাকে নতুন বৈশিষ্ট্যগুলি চেষ্টা করার এবং তাদের ব্যবহারযোগ্যতা, ব্যবহারিকতা এবং কার্যকারিতা সম্পর্কে প্রতিক্রিয়া জানাতে দেয়। আরও তথ্যের জন্য, মূল ট্রায়াল দিয়ে শুরু করুন দেখুন।

FedCM Continuation API বান্ডেল অরিজিন ট্রায়াল চেষ্টা করতে, দুটি অরিজিন ট্রায়াল টোকেন তৈরি করুন:

আপনি যদি বোতাম ফ্লো সহ কন্টিনিউয়েশন API সক্রিয় করতে আগ্রহী হন তবে বোতাম মোড API অরিজিন ট্রায়ালও সক্ষম করুন:

স্টোরেজ অ্যাক্সেস API অরিজিন ট্রায়ালের জন্য একটি বিশ্বস্ত সংকেত হিসাবে FedCM চেষ্টা করতে:

কন্টিনিউয়েশন এপিআই বান্ডেল অরিজিন ট্রায়াল এবং স্টোরেজ অ্যাক্সেস এপিআই অরিজিন ট্রায়ালের ট্রাস্ট সিগন্যাল হিসেবে FedCM Chrome 126 থেকে পাওয়া যায়।

RP-এর জন্য একটি তৃতীয় পক্ষের মূল ট্রায়াল নিবন্ধন করুন

  1. অরিজিন ট্রায়াল রেজিস্ট্রেশন পেজে যান।
  2. রেজিস্টার বোতামে ক্লিক করুন এবং একটি টোকেন অনুরোধ করতে ফর্মটি পূরণ করুন।
  3. ওয়েব অরিজিন হিসাবে আইডিপির উত্স লিখুন৷
  4. অন্যান্য উত্সগুলিতে জাভাস্ক্রিপ্টের সাথে টোকেন ইনজেক্ট করতে তৃতীয় পক্ষের মিল পরীক্ষা করুন৷
  5. জমা দিন ক্লিক করুন.
  6. একটি তৃতীয় পক্ষের ওয়েবসাইটে জারি করা টোকেন এম্বেড করুন।

একটি তৃতীয় পক্ষের ওয়েবসাইটে টোকেনটি এম্বেড করতে, IdP এর জাভাস্ক্রিপ্ট লাইব্রেরিতে নিম্নলিখিত কোডটি যোগ করুন বা IdP এর উত্স থেকে পরিবেশিত SDK৷

const tokenElement = document.createElement('meta');
tokenElement.httpEquiv = 'origin-trial';
tokenElement.content = 'TOKEN_GOES_HERE';
document.head.appendChild(tokenElement);

আপনার নিজের টোকেন দিয়ে TOKEN_GOES_HERE প্রতিস্থাপন করুন।

,

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

অরিজিন ট্রায়াল: FedCM কন্টিনিউয়েশন এপিআই বান্ডেল

FedCM কন্টিনিউয়েশন API বান্ডেল একাধিক FedCM এক্সটেনশন নিয়ে গঠিত:

ধারাবাহিকতা API

একজন ব্যবহারকারী RP-তে সাইন ইন করছেন তারপর বোতাম মোডের মাধ্যমে অনুমোদন করছেন।

আপনি Glitch এ API এর একটি ডেমো পরীক্ষা করতে পারেন।

কন্টিনিউয়েশন এপিআই আইডিপি-এর আইডি অ্যাসারশন এন্ডপয়েন্টকে ঐচ্ছিকভাবে একটি ইউআরএল ফেরত দিতে দেয় যা FedCM ব্যবহারকারীকে বহু-ধাপে সাইন-ইন প্রবাহ চালিয়ে যেতে দেয়। এটি আইডিপিকে ব্যবহারকারীর সার্ভার-সাইড রিসোর্সে অ্যাক্সেসের মতো বিদ্যমান FedCM UI-তে যা সম্ভব তার বাইরে নির্ভরশীল পক্ষ (RP) অনুমতি দেওয়ার জন্য ব্যবহারকারীকে অনুরোধ করার অনুমতি দেয়।

সাধারণত, আইডি দাবী শেষ পয়েন্ট প্রমাণীকরণের জন্য প্রয়োজনীয় একটি টোকেন প্রদান করে।

{
  "token": "***********"
}

যাইহোক, ধারাবাহিকতা এপিআইয়ের সাথে, আইডি দৃ ser ়তা এন্ডপয়েন্টটি একটি continue_on সম্পত্তি ফিরিয়ে দিতে পারে যার মধ্যে একটি পরম পথ বা আইডি দৃ ser ়তার শেষ পয়েন্টের একটি আপেক্ষিক পথ অন্তর্ভুক্ত রয়েছে।

{
  // In the id_assertion_endpoint, instead of returning a typical
  // "token" response, the IdP decides that it needs the user to
  // continue on a pop-up window:
  "continue_on": "/oauth/authorize?scope=..."
}

ব্রাউজারটি continue_on প্রতিক্রিয়া পাওয়ার সাথে সাথে একটি নতুন পপআপ উইন্ডো খোলার সাথে সাথে ব্যবহারকারীকে নির্দিষ্ট পথে নেভিগেট করে।

ব্যবহারকারী পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করার পরে, উদাহরণস্বরূপ আরপির সাথে অতিরিক্ত তথ্য ভাগ করে নেওয়ার জন্য আরও অনুমতি দেওয়ার জন্য, আইডিপি পৃষ্ঠাটি IdentityProvider.resolve() কল করতে পারে মূল navigator.credentials.get() একটি টোকেনকে যুক্তি হিসাবে কল করতে এবং ফিরিয়ে দিতে পারে।

document.getElementById('allow_btn').addEventListener('click', async () => {
  let accessToken = await fetch('/generate_access_token.cgi');
  // Closes the window and resolves the promise (that is still hanging
  // in the relying party's renderer) with the value that is passed.
  IdentityProvider.resolve(accessToken);
});

ব্রাউজারটি তখন নিজেই পপআপটি বন্ধ করে এপিআই কলারের কাছে টোকেনটি ফিরিয়ে দেবে।

যদি ব্যবহারকারী অনুরোধটি প্রত্যাখ্যান করে তবে আপনি IdentityProvider.close()

IdentityProvider.close();

যদি কোনও কারণে ব্যবহারকারী পপআপে তাদের অ্যাকাউন্ট পরিবর্তন করে থাকেন (উদাহরণস্বরূপ আইডিপি একটি "স্যুইচ ব্যবহারকারী" ফাংশন সরবরাহ করে, বা প্রতিনিধিদের ক্ষেত্রে), সমাধান কলটি একটি al চ্ছিক দ্বিতীয় যুক্তি গ্রহণ করে যেমন কিছু দেয়:

IdentityProvider.resolve(token, {accountId: '1234');

পরামিতি API

প্যারামিটারগুলি এপিআই আরপিটিকে আইডি দৃ ser ়তা শেষ পয়েন্টে অতিরিক্ত পরামিতি সরবরাহ করতে দেয়। প্যারামিটার এপিআইয়ের সাহায্যে, আরপিএস বেসিক সাইন-ইন ছাড়িয়ে সংস্থানগুলির জন্য অনুমতিগুলির জন্য অনুরোধ করতে আইডিপিতে অতিরিক্ত পরামিতিগুলি পাস করতে পারে। ব্যবহারকারী ধারাবাহিকতা এপিআইয়ের মাধ্যমে চালু হওয়া আইডিপি-নিয়ন্ত্রিত ইউএক্স প্রবাহের মাধ্যমে এই অনুমতিগুলি অনুমোদন করবে।

এপিআই ব্যবহার করতে, 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',
        ETC: 'MOAR',
        scope: 'calendar.readonly photos.write',
      }
    },
  }
});

params অবজেক্টে সম্পত্তির নামগুলি param_ দিয়ে প্রস্তুত করা হয়। উপরোক্ত উদাহরণে, প্যারামস সম্পত্তিটিতে IDP_SPECIFIC_PARAM '1' হিসাবে, 'BAR' হিসাবে foo , ETC 'MOAR' হিসাবে এবং 'calendar.readonly photos.write' হিসাবে scope রয়েছে। এটি param_IDP_SPECIFIC_PARAM=1&param_foo=BAR&param_ETC=MOAR&param_scope=calendar.readonly%20photos.write

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=234234&disclosure_text_shown=false&param_IDP_SPECIFIC_PARAM=1&param_foo=BAR&param_ETC=MOAR&param_scope=calendar.readonly%20photos.write

গতিশীলভাবে অনুমতি পান

সাধারণভাবে, ব্যবহারকারীরা যখন প্রয়োজন হয় তখন তাদের অনুমতিগুলির জন্য অনুরোধ করা সবচেয়ে সহায়ক, যখন বিকাশকারী মনে করেন যে তারা বাস্তবায়ন করা সবচেয়ে সহজ। উদাহরণস্বরূপ, ব্যবহারকারী যখন কোনও ফটো তুলতে চলেছেন তখন কোনও ক্যামেরা অ্যাক্সেস করার অনুমতি চাইতে জিজ্ঞাসা করা ব্যবহারকারী ওয়েবসাইটে অবতরণ করার সাথে সাথে অনুমতি চাইতে পছন্দ করা হয়। একই অনুশীলন সার্ভার সংস্থানগুলিতে প্রযোজ্য। যখন তাদের ব্যবহারকারীর জন্য প্রয়োজন হয় কেবল তখনই অনুমতিগুলির অনুরোধ করুন। একে "গতিশীল অনুমোদন" বলা হয়।

ফেডসিএমের সাথে গতিশীলভাবে অনুমোদনের জন্য অনুরোধ করতে, আইডিপি পারে:

  1. আইডিপি বুঝতে পারে এমন প্রয়োজনীয় পরামিতিগুলির সাথে navigator.credentials.get() কল করুন scope
  2. আইডি দৃ ser ়তা এন্ডপয়েন্টটি নিশ্চিত করে যে ব্যবহারকারী ইতিমধ্যে সাইন ইন হয়েছে এবং একটি continue_on ইউআরএল দিয়ে সাড়া দেয়।
  3. ব্রাউজারটি আইডিপির অনুমতি পৃষ্ঠাটি সহ একটি পপআপ উইন্ডো খোলে অতিরিক্ত অনুমতি চেয়ে অনুরোধ করা স্কোপগুলির সাথে মেলে।
  4. আইডিপির মাধ্যমে IdentityProvider.resolve() এর মাধ্যমে অনুমোদিত হয়ে গেলে উইন্ডোটি বন্ধ হয়ে যায় এবং আরপি -র মূল navigator.credentials.get() কলটি একটি প্রাসঙ্গিক টোকেন বা একটি অনুমোদনের কোড পায় যাতে আরপি এটি যথাযথ অ্যাক্সেস টোকেন দিয়ে বিনিময় করতে পারে।

ক্ষেত্রগুলি এপিআই

ক্ষেত্রগুলি এপিআই আরপিকে আইডিপি থেকে অনুরোধ করার জন্য অ্যাকাউন্টের বৈশিষ্ট্যগুলি ঘোষণা করার অনুমতি দেয় যাতে ব্রাউজারটি ফেডসিএম ডায়ালগে একটি যথাযথ প্রকাশ ইউআই সরবরাহ করতে পারে; রিটার্ন টোকেনে অনুরোধ করা ক্ষেত্রগুলি অন্তর্ভুক্ত করা আইডিপির দায়িত্ব। এই ওপেনআইডি কানেক্ট বনাম "স্কোপস" ওউথের একটি "বেসিক প্রোফাইল" এর অনুরোধটি বিবেচনা করুন।

উইজেট মোডে প্রকাশের বার্তা।
উইজেট মোডে প্রকাশের বার্তা।
বোতাম মোডে প্রকাশের বার্তা।
বোতাম মোডে প্রকাশের বার্তা।

ক্ষেত্রগুলি এপিআই ব্যবহার করতে, navigator.credentials.get() কলটিতে একটি অ্যারে হিসাবে fields সম্পত্তিতে পরামিতি যুক্ত করুন। ক্ষেত্রগুলিতে আপাতত 'name' , 'email' এবং 'picture' থাকতে পারে তবে ভবিষ্যতে আরও মান অন্তর্ভুক্ত করার জন্য প্রসারিত করা যেতে পারে।

fields সহ একটি অনুরোধ এটির মতো দেখতে হবে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      fields: ['name', 'email', 'picture'],
      clientId: '1234',
      configURL: 'https://idp.example/fedcm.json',
      params: {
        scope: 'drive.readonly calendar.readonly',
      }
    },
  }
  mediation: 'optional',
});

আইডি দৃ ser ়তা এন্ডপয়েন্টে এইচটিটিপি অনুরোধে আরপি-নির্দিষ্ট fields প্যারামিটার অন্তর্ভুক্ত রয়েছে, এতে disclosure_text_shown প্যারামিটারটি true হিসাবে সেট করা হয়েছে যদি এটি কোনও রিটার্ন ব্যবহারকারী না হয় এবং ব্রাউজারটি যে ক্ষেত্রগুলি একটি disclosure_shown_for প্যারামিটারে ব্যবহারকারীর কাছে প্রকাশ করেছিল:

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=true&fields=email,name,picture&disclosure_shown_for=email,name,picture

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

fields যদি খালি অ্যারে হয় তবে অনুরোধটি এর মতো দেখতে হবে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      fields: [],
      clientId: '1234',
      configURL: 'https://idp.example/fedcm.json',
      params: {
        scope: 'drive.readonly calendar.readonly',
      }
    },
  }
  mediation: 'optional',
});

fields যদি খালি অ্যারে হয় তবে ব্যবহারকারী এজেন্ট প্রকাশ ইউআই এড়িয়ে যাবে।

প্রকাশের বার্তা উইজেট মোডে প্রদর্শিত হয় না। বোতাম প্রবাহে, প্রকাশের ইউআই পুরোপুরি এড়িয়ে যায়।
প্রকাশের বার্তা উইজেট মোডে প্রদর্শিত হয় না। বোতাম প্রবাহে, প্রকাশের ইউআই পুরোপুরি এড়িয়ে যায়।

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

এই ক্ষেত্রে, এইচটিটিপি বডিটিতে আইডি দৃ ser ়তা শেষ পয়েন্টে প্রেরিত 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

account_id=123&client_id=client1234&nonce=234234&disclosure_text_shown=false

একাধিক কনফিগার

একাধিক কনফিগারেলগুলি আইডিপিকে আইডিপির জন্য একাধিক কনফিগার ফাইলগুলি সমন্বিত করার অনুমতি দেয়, accounts_endpoint এবং login_url সুপরিচিত ফাইলটিতে কনফিগার ফাইলগুলির মতো একই নির্দিষ্ট করে।

যদি accounts_endpoint এবং login_url সুপরিচিত ফাইলটিতে যুক্ত করা হয় তবে provider_urls উপেক্ষা করা হয় যাতে আইডিপি একাধিক কনফিগার ফাইলগুলিকে সমর্থন করতে পারে। যদি তা না হয় তবে provider_urls কার্যকর হতে থাকে যাতে এটি পিছনে সামঞ্জস্যপূর্ণ হয়।

একাধিক কনফিগারগুলি সমর্থন করে এমন সুপরিচিত ফাইলটি এর মতো দেখতে পারে:

{
  "provider_urls": [ "https://idp.example/fedcm.json" ],
  "accounts_endpoint": "https://idp.example/accounts",
  "login_url": "https://idp.example/login"
}

এটি আমাদের অনুমতি দেয়:

  1. বিদ্যমান সুপরিচিত ফাইল এবং ব্রাউজারগুলির পূর্ববর্তী সংস্করণ যা ইতিমধ্যে বন্যে মোতায়েন করা হয়েছে তার সাথে পিছনের দিকে এবং ফরোয়ার্ড সামঞ্জস্যতা বজায় রাখুন।
  2. কনফিগারেশন ফাইলগুলির একটি স্বেচ্ছাসেবী সংখ্যা রয়েছে - যতক্ষণ না তারা সকলেই একই accounts_endpoint এবং login_url নির্দেশ করে।
  3. accounts_endpoint করা শংসাপত্রিত ফেচ অনুরোধে এনট্রপির জন্য যুক্ত হওয়ার কোনও সুযোগ নেই, যেহেতু এটি "। ভাল-পরিচিত" স্তরে নির্দিষ্ট করতে হবে।

একাধিক কনফিগারেলগুলিকে সমর্থন করা al চ্ছিক এবং বিদ্যমান ফেডসিএম বাস্তবায়ন একই থাকতে পারে।

কাস্টম অ্যাকাউন্ট লেবেল

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

উদাহরণ

একটি আইডিপি যথাক্রমে গ্রাহক এবং এন্টারপ্রাইজের জন্য দুটি কনফিগারেল সমর্থন করে। গ্রাহক কনফিগারেশন ফাইলটিতে একটি 'consumer' লেবেল রয়েছে এবং এন্টারপ্রাইজ কনফিগারেশন ফাইলটিতে একটি 'enterprise' লেবেল রয়েছে।

এই জাতীয় সেটআপের সাথে, সুপরিচিত ফাইলটিতে একাধিক কনফিগারেলগুলির অনুমতি দেওয়ার জন্য accounts_endpoint এবং login_url অন্তর্ভুক্ত রয়েছে।

{
  "provider_urls": [ "https://idp.example/fedcm.json" ],
  "accounts_endpoint": "https://idp.example/accounts",
  "login_url": "https://idp.example/login"
}

যখন accounts_endpoint সুপরিচিত ফাইলে সরবরাহ করা হয়, তখন provider_urls উপেক্ষা করা হয়। আরপি সরাসরি navigator.credentials.get() কল এ সংশ্লিষ্ট কনফিগার ফাইলগুলিতে নির্দেশ করতে পারে।

গ্রাহক কনফিগারেশন ফাইলটি https://idp.example/fedcm.json এ রয়েছে যার মধ্যে accounts সম্পত্তি অন্তর্ভুক্ত রয়েছে যা include ব্যবহার করে 'consumer' নির্দিষ্ট করে।

{
  "accounts_endpoint": "https://idp.example/accounts",
  "client_metadata_endpoint": "/client_metadata",
  "login_url": "https://idp.example/login",
  "id_assertion_endpoint": "/assertion",
  "accounts": {
    "include": "consumer"
  }
}

এন্টারপ্রাইজ কনফিগারেশন ফাইলটি https://idp.example/enterprise/fedcm.json এ রয়েছে, এতে accounts সম্পত্তি অন্তর্ভুক্ত রয়েছে যা include ব্যবহার করে 'enterprise' নির্দিষ্ট করে।

{
  "accounts_endpoint": "https://idp.example/accounts",
  "client_metadata_endpoint": "/enterprise/client_metadata",
  "login_url": "https://idp.example/login",
  "id_assertion_endpoint": "/assertion",
  "accounts": {
    "include": "enterprise"
  }
}

সাধারণ আইডিপি অ্যাকাউন্টগুলি শেষ পয়েন্ট (এই উদাহরণে https://idp.example/accounts ) অ্যাকাউন্টগুলির একটি তালিকা প্রদান করে যা প্রতিটি অ্যাকাউন্টের জন্য একটি অ্যারেতে নির্ধারিত labels সহ একটি লেবেল সম্পত্তি অন্তর্ভুক্ত করে। নিম্নলিখিতটি এমন কোনও ব্যবহারকারীর জন্য একটি উদাহরণ প্রতিক্রিয়া যার দুটি অ্যাকাউন্ট রয়েছে। একটি গ্রাহকের জন্য এবং অন্যটি এন্টারপ্রাইজের জন্য:

{
 "accounts": [{
   "id": "123",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "labels": ["consumer"]
  }], [{
   "id": "4567",
   "given_name": "Jane",
   "name": "Jane Doe",
   "email": "jane_doe@idp.example",
   "picture": "https://idp.example/profile/4567",
   "labels": ["enterprise"]
  }]
}

যখন কোনও আরপি 'enterprise' ব্যবহারকারীদের সাইন ইন করার অনুমতি দিতে চায়, তখন তারা 'enterprise' কনফিগার 'https://idp.example/enterprise/fedcm.json' navigator.credentials.get() কল করুন: কল:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      clientId: '1234',
      nonce: '234234',
      configURL: 'https://idp.example/enterprise/fedcm.json',
    },
  }
});

ফলস্বরূপ, কেবলমাত্র '4567' এর অ্যাকাউন্ট আইডি ব্যবহারকারীর সাইন ইন করার জন্য উপলব্ধ। '123' এর অ্যাকাউন্ট আইডি নিঃশব্দে ব্রাউজার দ্বারা লুকানো থাকে যাতে ব্যবহারকারীকে এমন কোনও অ্যাকাউন্ট সরবরাহ না করা হয় যা এই সাইটে আইডিপি দ্বারা সমর্থিত নয়।

অরিজিন ট্রায়াল: স্টোরেজ অ্যাক্সেস এপিআইয়ের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএম

ক্রোম 126 স্টোরেজ অ্যাক্সেস এপিআইয়ের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএমের একটি উত্স ট্রায়াল শুরু করছে। এই পরিবর্তনের সাথে সাথে, ফেডসিএমের মাধ্যমে একটি পূর্ব অনুমতি অনুদান স্টোরেজ অ্যাক্সেস এপিআই দ্বারা স্টোরেজ অ্যাক্সেস অনুরোধটি স্বয়ংক্রিয়ভাবে অনুমোদনের একটি বৈধ কারণ হয়ে ওঠে।

এটি কার্যকর যখন কোনও এম্বেড থাকা আইএফআরএমই ব্যক্তিগতকৃত সংস্থানগুলিতে অ্যাক্সেস করতে চায়: উদাহরণস্বরূপ, যদি আইডিপি.এক্সএএমপিএলকে RP.EXAME এ এম্বেড করা থাকে এবং একটি ব্যক্তিগতকৃত সংস্থান দেখাতে হয়। যদি ব্রাউজারটি তৃতীয় পক্ষের কুকিগুলিতে অ্যাক্সেসকে সীমাবদ্ধ করে, এমনকি যদি ব্যবহারকারীকে RP.EXAME এ সাইন ইন করা হয় তবে ফেডসিএম এর সাথে উদাহরণ ব্যবহার করে, এম্বেডড আইডিপি.এক্সএমএএমএল আইএফআরএএম ব্যক্তিগতকৃত সংস্থানগুলির জন্য অনুরোধ করতে সক্ষম হবে না কারণ অনুরোধগুলিতে তৃতীয়-পক্ষের কুকিজ অন্তর্ভুক্ত হবে না।

এটি অর্জনের জন্য, আইডিপি.এক্সএএমএলকে ওয়েবসাইটে এম্বেড করা আইফ্রেমের মাধ্যমে স্টোরেজ অ্যাক্সেসের অনুমতি নেওয়া দরকার এবং এটি কেবল অনুমতি প্রম্পটের মাধ্যমে পাওয়া যায়।

স্টোরেজ অ্যাক্সেস এপিআইয়ের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএম সহ, স্টোরেজ অ্যাক্সেস এপিআই অনুমতি চেকগুলি কেবল স্টোরেজ অ্যাক্সেস প্রম্পট দ্বারা প্রদত্ত অনুমতি অনুদানটি গ্রহণ করে না, তবে ফেডসিএম প্রম্পট দ্বারা প্রদত্ত অনুমতি অনুদানও গ্রহণ করে।

// In top-level rp.example:

// Ensure FedCM permission has been granted.
const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://idp.example/fedcm.json',
      clientId: '123',
    }],
  },
  mediation: 'optional',
});

// In an embedded IdP iframe:

// No user gesture is needed to call this, and the call will be auto-granted.
await document.requestStorageAccess();

// This returns `true`.
const hasAccess = await document.hasStorageAccess();

ব্যবহারকারী ফেডসিএমের সাথে সাইন ইন হয়ে গেলে, ফেডসিএম প্রমাণীকরণ সক্রিয় থাকাকালীন অনুমতিটি অটো-গ্রান্ট করা হয়। এর অর্থ হ'ল একবার ব্যবহারকারী সংযোগ বিচ্ছিন্ন হয়ে গেলে, অনুমতি অনুরোধ করা একটি প্রম্পট প্রদর্শন করবে।

মূল পরীক্ষায় অংশ নিন

আপনি ক্রোম ফ্ল্যাগ chrome://flags#fedcm-authz ক্রোম 126 বা তার পরে চালু করে স্থানীয়ভাবে ফেডসিএম ধারাবাহিকতা এপিআই বান্ডিল চেষ্টা করতে পারেন। আপনি ক্রোম 126 বা তার পরে ক্রোম-এ #fedcm-with-storage-access-api চালু করে স্থানীয়ভাবে স্টোরেজ অ্যাক্সেস এপিআইয়ের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএম চেষ্টা করতে পারেন।

এই বৈশিষ্ট্যগুলি মূল পরীক্ষা হিসাবেও উপলব্ধ। মূল পরীক্ষাগুলি আপনাকে নতুন বৈশিষ্ট্যগুলি চেষ্টা করতে এবং তাদের ব্যবহারযোগ্যতা, ব্যবহারিকতা এবং কার্যকারিতা সম্পর্কে প্রতিক্রিয়া জানাতে দেয়। আরও তথ্যের জন্য, মূল পরীক্ষাগুলি দিয়ে শুরু করুন দেখুন।

ফেডসিএম ধারাবাহিকতা এপিআই বান্ডিল অরিজিন ট্রায়াল চেষ্টা করতে, দুটি উত্স ট্রায়াল টোকেন তৈরি করুন:

আপনি যদি বোতাম প্রবাহের সাথে ধারাবাহিকতা এপিআই সক্ষম করতে আগ্রহী হন তবে বোতাম মোড এপিআই উত্সের পরীক্ষাও সক্ষম করুন:

স্টোরেজ অ্যাক্সেস এপিআই উত্স পরীক্ষার জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএম চেষ্টা করতে:

ধারাবাহিকতা এপিআই বান্ডিল অরিজিন ট্রায়াল এবং ফেডসিএম স্টোরেজ অ্যাক্সেসের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে এপিআই অরিজিন ট্রায়াল ক্রোম 126 থেকে পাওয়া যায়।

আরপি-র জন্য তৃতীয় পক্ষের উত্স ট্রায়াল নিবন্ধন করুন

  1. অরিজিন ট্রায়াল রেজিস্ট্রেশন পৃষ্ঠায় যান।
  2. রেজিস্টার বোতামটি ক্লিক করুন এবং একটি টোকেনের জন্য অনুরোধ করতে ফর্মটি পূরণ করুন।
  3. ওয়েব উত্স হিসাবে আইডিপির উত্স লিখুন।
  4. অন্যান্য উত্সের জাভাস্ক্রিপ্টের সাথে টোকেন ইনজেকশন করতে তৃতীয় পক্ষের ম্যাচিং পরীক্ষা করুন।
  5. জমা দিন ক্লিক করুন.
  6. তৃতীয় পক্ষের ওয়েবসাইটে জারি করা টোকেন এম্বেড করুন।

তৃতীয় পক্ষের ওয়েবসাইটে টোকেন এম্বেড করতে, আইডিপির জাভাস্ক্রিপ্ট লাইব্রেরি বা এসডিকে আইডিপির উত্স থেকে পরিবেশন করা নিম্নলিখিত কোডটি যুক্ত করুন।

const tokenElement = document.createElement('meta');
tokenElement.httpEquiv = 'origin-trial';
tokenElement.content = 'TOKEN_GOES_HERE';
document.head.appendChild(tokenElement);

আপনার নিজের টোকেন দিয়ে TOKEN_GOES_HERE প্রতিস্থাপন করুন।

,

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

উত্স পরীক্ষা: ফেডসিএম ধারাবাহিকতা এপিআই বান্ডিল

ফেডসিএম ধারাবাহিকতা এপিআই বান্ডলে একাধিক ফেডসিএম এক্সটেনশন রয়েছে:

ধারাবাহিকতা এপিআই

একজন ব্যবহারকারী আরপিতে সাইন ইন করছেন তারপরে বোতাম মোডের মাধ্যমে অনুমোদিত।

আপনি গ্লিচ এ এপিআইয়ের একটি ডেমো পরীক্ষা করে দেখতে পারেন।

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

সাধারণত, আইডি দৃ ser ়তা এন্ডপয়েন্টটি প্রমাণীকরণের জন্য প্রয়োজনীয় একটি টোকেন দেয়।

{
  "token": "***********"
}

যাইহোক, ধারাবাহিকতা এপিআইয়ের সাথে, আইডি দৃ ser ়তা এন্ডপয়েন্টটি একটি continue_on সম্পত্তি ফিরিয়ে দিতে পারে যার মধ্যে একটি পরম পথ বা আইডি দৃ ser ়তার শেষ পয়েন্টের একটি আপেক্ষিক পথ অন্তর্ভুক্ত রয়েছে।

{
  // In the id_assertion_endpoint, instead of returning a typical
  // "token" response, the IdP decides that it needs the user to
  // continue on a pop-up window:
  "continue_on": "/oauth/authorize?scope=..."
}

ব্রাউজারটি continue_on প্রতিক্রিয়া পাওয়ার সাথে সাথে একটি নতুন পপআপ উইন্ডো খোলার সাথে সাথে ব্যবহারকারীকে নির্দিষ্ট পথে নেভিগেট করে।

ব্যবহারকারী পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করার পরে, উদাহরণস্বরূপ আরপির সাথে অতিরিক্ত তথ্য ভাগ করে নেওয়ার জন্য আরও অনুমতি দেওয়ার জন্য, আইডিপি পৃষ্ঠাটি IdentityProvider.resolve() কল করতে পারে মূল navigator.credentials.get() একটি টোকেনকে যুক্তি হিসাবে কল করতে এবং ফিরিয়ে দিতে পারে।

document.getElementById('allow_btn').addEventListener('click', async () => {
  let accessToken = await fetch('/generate_access_token.cgi');
  // Closes the window and resolves the promise (that is still hanging
  // in the relying party's renderer) with the value that is passed.
  IdentityProvider.resolve(accessToken);
});

ব্রাউজারটি তখন নিজেই পপআপটি বন্ধ করে এপিআই কলারের কাছে টোকেনটি ফিরিয়ে দেবে।

যদি ব্যবহারকারী অনুরোধটি প্রত্যাখ্যান করে তবে আপনি IdentityProvider.close()

IdentityProvider.close();

যদি কোনও কারণে ব্যবহারকারী পপআপে তাদের অ্যাকাউন্ট পরিবর্তন করে থাকেন (উদাহরণস্বরূপ আইডিপি একটি "স্যুইচ ব্যবহারকারী" ফাংশন সরবরাহ করে, বা প্রতিনিধিদের ক্ষেত্রে), সমাধান কলটি একটি al চ্ছিক দ্বিতীয় যুক্তি গ্রহণ করে যেমন কিছু দেয়:

IdentityProvider.resolve(token, {accountId: '1234');

পরামিতি API

প্যারামিটারগুলি এপিআই আরপিটিকে আইডি দৃ ser ়তা শেষ পয়েন্টে অতিরিক্ত পরামিতি সরবরাহ করতে দেয়। প্যারামিটার এপিআইয়ের সাহায্যে, আরপিএস বেসিক সাইন-ইন ছাড়িয়ে সংস্থানগুলির জন্য অনুমতিগুলির জন্য অনুরোধ করতে আইডিপিতে অতিরিক্ত পরামিতিগুলি পাস করতে পারে। ব্যবহারকারী ধারাবাহিকতা এপিআইয়ের মাধ্যমে চালু হওয়া আইডিপি-নিয়ন্ত্রিত ইউএক্স প্রবাহের মাধ্যমে এই অনুমতিগুলি অনুমোদন করবে।

এপিআই ব্যবহার করতে, 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',
        ETC: 'MOAR',
        scope: 'calendar.readonly photos.write',
      }
    },
  }
});

params অবজেক্টে সম্পত্তির নামগুলি param_ দিয়ে প্রস্তুত করা হয়। উপরোক্ত উদাহরণে, প্যারামস সম্পত্তিটিতে IDP_SPECIFIC_PARAM '1' হিসাবে, 'BAR' হিসাবে foo , ETC 'MOAR' হিসাবে এবং 'calendar.readonly photos.write' হিসাবে scope রয়েছে। এটি param_IDP_SPECIFIC_PARAM=1&param_foo=BAR&param_ETC=MOAR&param_scope=calendar.readonly%20photos.write

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=234234&disclosure_text_shown=false&param_IDP_SPECIFIC_PARAM=1&param_foo=BAR&param_ETC=MOAR&param_scope=calendar.readonly%20photos.write

গতিশীলভাবে অনুমতি পান

সাধারণভাবে, ব্যবহারকারীরা যখন প্রয়োজন হয় তখন তাদের অনুমতিগুলির জন্য অনুরোধ করা সবচেয়ে সহায়ক, যখন বিকাশকারী মনে করেন যে তারা বাস্তবায়ন করা সবচেয়ে সহজ। উদাহরণস্বরূপ, ব্যবহারকারী যখন কোনও ফটো তুলতে চলেছেন তখন কোনও ক্যামেরা অ্যাক্সেস করার অনুমতি চাইতে জিজ্ঞাসা করা ব্যবহারকারী ওয়েবসাইটে অবতরণ করার সাথে সাথে অনুমতি চাইতে পছন্দ করা হয়। একই অনুশীলন সার্ভার সংস্থানগুলিতে প্রযোজ্য। যখন তাদের ব্যবহারকারীর জন্য প্রয়োজন হয় কেবল তখনই অনুমতিগুলির অনুরোধ করুন। একে "গতিশীল অনুমোদন" বলা হয়।

ফেডসিএমের সাথে গতিশীলভাবে অনুমোদনের জন্য অনুরোধ করতে, আইডিপি পারে:

  1. আইডিপি বুঝতে পারে এমন প্রয়োজনীয় পরামিতিগুলির সাথে navigator.credentials.get() কল করুন scope
  2. আইডি দৃ ser ়তা এন্ডপয়েন্টটি নিশ্চিত করে যে ব্যবহারকারী ইতিমধ্যে সাইন ইন হয়েছে এবং একটি continue_on ইউআরএল দিয়ে সাড়া দেয়।
  3. ব্রাউজারটি আইডিপির অনুমতি পৃষ্ঠাটি সহ একটি পপআপ উইন্ডো খোলে অতিরিক্ত অনুমতি চেয়ে অনুরোধ করা স্কোপগুলির সাথে মেলে।
  4. আইডিপির মাধ্যমে IdentityProvider.resolve() এর মাধ্যমে অনুমোদিত হয়ে গেলে উইন্ডোটি বন্ধ হয়ে যায় এবং আরপি -র মূল navigator.credentials.get() কলটি একটি প্রাসঙ্গিক টোকেন বা একটি অনুমোদনের কোড পায় যাতে আরপি এটি যথাযথ অ্যাক্সেস টোকেন দিয়ে বিনিময় করতে পারে।

ক্ষেত্রগুলি এপিআই

ক্ষেত্রগুলি এপিআই আরপিকে আইডিপি থেকে অনুরোধ করার জন্য অ্যাকাউন্টের বৈশিষ্ট্যগুলি ঘোষণা করার অনুমতি দেয় যাতে ব্রাউজারটি ফেডসিএম ডায়ালগে একটি যথাযথ প্রকাশ ইউআই সরবরাহ করতে পারে; রিটার্ন টোকেনে অনুরোধ করা ক্ষেত্রগুলি অন্তর্ভুক্ত করা আইডিপির দায়িত্ব। এই ওপেনআইডি কানেক্ট বনাম "স্কোপস" ওউথের একটি "বেসিক প্রোফাইল" এর অনুরোধটি বিবেচনা করুন।

উইজেট মোডে প্রকাশের বার্তা।
উইজেট মোডে প্রকাশের বার্তা।
বোতাম মোডে প্রকাশের বার্তা।
বোতাম মোডে প্রকাশের বার্তা।

ক্ষেত্রগুলি এপিআই ব্যবহার করতে, navigator.credentials.get() কলটিতে একটি অ্যারে হিসাবে fields সম্পত্তিতে পরামিতি যুক্ত করুন। ক্ষেত্রগুলিতে আপাতত 'name' , 'email' এবং 'picture' থাকতে পারে তবে ভবিষ্যতে আরও মান অন্তর্ভুক্ত করার জন্য প্রসারিত করা যেতে পারে।

fields সহ একটি অনুরোধ এটির মতো দেখতে হবে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      fields: ['name', 'email', 'picture'],
      clientId: '1234',
      configURL: 'https://idp.example/fedcm.json',
      params: {
        scope: 'drive.readonly calendar.readonly',
      }
    },
  }
  mediation: 'optional',
});

আইডি দৃ ser ়তা এন্ডপয়েন্টে এইচটিটিপি অনুরোধে আরপি-নির্দিষ্ট fields প্যারামিটার অন্তর্ভুক্ত রয়েছে, এতে disclosure_text_shown প্যারামিটারটি true হিসাবে সেট করা হয়েছে যদি এটি কোনও রিটার্ন ব্যবহারকারী না হয় এবং ব্রাউজারটি যে ক্ষেত্রগুলি একটি disclosure_shown_for প্যারামিটারে ব্যবহারকারীর কাছে প্রকাশ করেছিল:

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=true&fields=email,name,picture&disclosure_shown_for=email,name,picture

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

fields যদি খালি অ্যারে হয় তবে অনুরোধটি এর মতো দেখতে হবে:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      fields: [],
      clientId: '1234',
      configURL: 'https://idp.example/fedcm.json',
      params: {
        scope: 'drive.readonly calendar.readonly',
      }
    },
  }
  mediation: 'optional',
});

fields যদি খালি অ্যারে হয় তবে ব্যবহারকারী এজেন্ট প্রকাশ ইউআই এড়িয়ে যাবে।

প্রকাশের বার্তা উইজেট মোডে প্রদর্শিত হয় না। বোতাম প্রবাহে, প্রকাশের ইউআই পুরোপুরি এড়িয়ে যায়।
প্রকাশের বার্তা উইজেট মোডে প্রদর্শিত হয় না। বোতাম প্রবাহে, প্রকাশের ইউআই পুরোপুরি এড়িয়ে যায়।

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

এই ক্ষেত্রে, এইচটিটিপি বডিটিতে আইডি দৃ ser ়তা শেষ পয়েন্টে প্রেরিত 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

account_id=123&client_id=client1234&nonce=234234&disclosure_text_shown=false

একাধিক কনফিগার

একাধিক কনফিগারেলগুলি আইডিপিকে আইডিপির জন্য একাধিক কনফিগার ফাইলগুলি সমন্বিত করার অনুমতি দেয়, accounts_endpoint এবং login_url সুপরিচিত ফাইলটিতে কনফিগার ফাইলগুলির মতো একই নির্দিষ্ট করে।

যদি accounts_endpoint এবং login_url সুপরিচিত ফাইলটিতে যুক্ত করা হয় তবে provider_urls উপেক্ষা করা হয় যাতে আইডিপি একাধিক কনফিগার ফাইলগুলিকে সমর্থন করতে পারে। যদি তা না হয় তবে provider_urls কার্যকর হতে থাকে যাতে এটি পিছনে সামঞ্জস্যপূর্ণ হয়।

একাধিক কনফিগারগুলি সমর্থন করে এমন সুপরিচিত ফাইলটি এর মতো দেখতে পারে:

{
  "provider_urls": [ "https://idp.example/fedcm.json" ],
  "accounts_endpoint": "https://idp.example/accounts",
  "login_url": "https://idp.example/login"
}

এটি আমাদের অনুমতি দেয়:

  1. বিদ্যমান সুপরিচিত ফাইল এবং ব্রাউজারগুলির পূর্ববর্তী সংস্করণ যা ইতিমধ্যে বন্যে মোতায়েন করা হয়েছে তার সাথে পিছনের দিকে এবং ফরোয়ার্ড সামঞ্জস্যতা বজায় রাখুন।
  2. কনফিগারেশন ফাইলগুলির একটি স্বেচ্ছাসেবী সংখ্যা রয়েছে - যতক্ষণ না তারা সকলেই একই accounts_endpoint এবং login_url নির্দেশ করে।
  3. accounts_endpoint করা শংসাপত্রিত ফেচ অনুরোধে এনট্রপির জন্য যুক্ত হওয়ার কোনও সুযোগ নেই, যেহেতু এটি "। ভাল-পরিচিত" স্তরে নির্দিষ্ট করতে হবে।

একাধিক কনফিগারেলগুলিকে সমর্থন করা al চ্ছিক এবং বিদ্যমান ফেডসিএম বাস্তবায়ন একই থাকতে পারে।

কাস্টম অ্যাকাউন্ট লেবেল

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

উদাহরণ

একটি আইডিপি যথাক্রমে গ্রাহক এবং এন্টারপ্রাইজের জন্য দুটি কনফিগারেল সমর্থন করে। গ্রাহক কনফিগারেশন ফাইলটিতে একটি 'consumer' লেবেল রয়েছে এবং এন্টারপ্রাইজ কনফিগারেশন ফাইলটিতে একটি 'enterprise' লেবেল রয়েছে।

এই জাতীয় সেটআপের সাথে, সুপরিচিত ফাইলটিতে একাধিক কনফিগারেলগুলির অনুমতি দেওয়ার জন্য accounts_endpoint এবং login_url অন্তর্ভুক্ত রয়েছে।

{
  "provider_urls": [ "https://idp.example/fedcm.json" ],
  "accounts_endpoint": "https://idp.example/accounts",
  "login_url": "https://idp.example/login"
}

যখন accounts_endpoint সুপরিচিত ফাইলে সরবরাহ করা হয়, তখন provider_urls উপেক্ষা করা হয়। আরপি সরাসরি navigator.credentials.get() কল এ সংশ্লিষ্ট কনফিগার ফাইলগুলিতে নির্দেশ করতে পারে।

গ্রাহক কনফিগারেশন ফাইলটি https://idp.example/fedcm.json এ রয়েছে যার মধ্যে accounts সম্পত্তি অন্তর্ভুক্ত রয়েছে যা include ব্যবহার করে 'consumer' নির্দিষ্ট করে।

{
  "accounts_endpoint": "https://idp.example/accounts",
  "client_metadata_endpoint": "/client_metadata",
  "login_url": "https://idp.example/login",
  "id_assertion_endpoint": "/assertion",
  "accounts": {
    "include": "consumer"
  }
}

এন্টারপ্রাইজ কনফিগারেশন ফাইলটি https://idp.example/enterprise/fedcm.json এ রয়েছে, এতে accounts সম্পত্তি অন্তর্ভুক্ত রয়েছে যা include ব্যবহার করে 'enterprise' নির্দিষ্ট করে।

{
  "accounts_endpoint": "https://idp.example/accounts",
  "client_metadata_endpoint": "/enterprise/client_metadata",
  "login_url": "https://idp.example/login",
  "id_assertion_endpoint": "/assertion",
  "accounts": {
    "include": "enterprise"
  }
}

সাধারণ আইডিপি অ্যাকাউন্টগুলি শেষ পয়েন্ট (এই উদাহরণে https://idp.example/accounts ) অ্যাকাউন্টগুলির একটি তালিকা প্রদান করে যা প্রতিটি অ্যাকাউন্টের জন্য একটি অ্যারেতে নির্ধারিত labels সহ একটি লেবেল সম্পত্তি অন্তর্ভুক্ত করে। নিম্নলিখিতটি এমন কোনও ব্যবহারকারীর জন্য একটি উদাহরণ প্রতিক্রিয়া যার দুটি অ্যাকাউন্ট রয়েছে। একটি গ্রাহকের জন্য এবং অন্যটি এন্টারপ্রাইজের জন্য:

{
 "accounts": [{
   "id": "123",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "labels": ["consumer"]
  }], [{
   "id": "4567",
   "given_name": "Jane",
   "name": "Jane Doe",
   "email": "jane_doe@idp.example",
   "picture": "https://idp.example/profile/4567",
   "labels": ["enterprise"]
  }]
}

যখন কোনও আরপি 'enterprise' ব্যবহারকারীদের সাইন ইন করার অনুমতি দিতে চায়, তখন তারা 'enterprise' কনফিগার 'https://idp.example/enterprise/fedcm.json' navigator.credentials.get() কল করুন: কল:

let { token } = await navigator.credentials.get({
  identity: {
    providers: [{
      clientId: '1234',
      nonce: '234234',
      configURL: 'https://idp.example/enterprise/fedcm.json',
    },
  }
});

ফলস্বরূপ, কেবলমাত্র '4567' এর অ্যাকাউন্ট আইডি ব্যবহারকারীর সাইন ইন করার জন্য উপলব্ধ। '123' এর অ্যাকাউন্ট আইডি নিঃশব্দে ব্রাউজার দ্বারা লুকানো থাকে যাতে ব্যবহারকারীকে এমন কোনও অ্যাকাউন্ট সরবরাহ না করা হয় যা এই সাইটে আইডিপি দ্বারা সমর্থিত নয়।

অরিজিন ট্রায়াল: স্টোরেজ অ্যাক্সেস এপিআইয়ের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএম

ক্রোম 126 স্টোরেজ অ্যাক্সেস এপিআইয়ের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএমের একটি উত্স ট্রায়াল শুরু করছে। এই পরিবর্তনের সাথে সাথে, ফেডসিএমের মাধ্যমে একটি পূর্ব অনুমতি অনুদান স্টোরেজ অ্যাক্সেস এপিআই দ্বারা স্টোরেজ অ্যাক্সেস অনুরোধটি স্বয়ংক্রিয়ভাবে অনুমোদনের একটি বৈধ কারণ হয়ে ওঠে।

এটি কার্যকর যখন কোনও এম্বেড থাকা আইএফআরএমই ব্যক্তিগতকৃত সংস্থানগুলিতে অ্যাক্সেস করতে চায়: উদাহরণস্বরূপ, যদি আইডিপি.এক্সএএমপিএলকে RP.EXAME এ এম্বেড করা থাকে এবং একটি ব্যক্তিগতকৃত সংস্থান দেখাতে হয়। যদি ব্রাউজারটি তৃতীয় পক্ষের কুকিগুলিতে অ্যাক্সেসকে সীমাবদ্ধ করে, এমনকি যদি ব্যবহারকারীকে RP.EXAME এ সাইন ইন করা হয় তবে ফেডসিএম এর সাথে উদাহরণ ব্যবহার করে, এম্বেডড আইডিপি.এক্সএমএএমএল আইএফআরএএম ব্যক্তিগতকৃত সংস্থানগুলির জন্য অনুরোধ করতে সক্ষম হবে না কারণ অনুরোধগুলিতে তৃতীয়-পক্ষের কুকিজ অন্তর্ভুক্ত হবে না।

এটি অর্জনের জন্য, আইডিপি.এক্সএএমএলকে ওয়েবসাইটে এম্বেড করা আইফ্রেমের মাধ্যমে স্টোরেজ অ্যাক্সেসের অনুমতি নেওয়া দরকার এবং এটি কেবল অনুমতি প্রম্পটের মাধ্যমে পাওয়া যায়।

স্টোরেজ অ্যাক্সেস এপিআইয়ের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএম সহ, স্টোরেজ অ্যাক্সেস এপিআই অনুমতি চেকগুলি কেবল স্টোরেজ অ্যাক্সেস প্রম্পট দ্বারা প্রদত্ত অনুমতি অনুদানটি গ্রহণ করে না, তবে ফেডসিএম প্রম্পট দ্বারা প্রদত্ত অনুমতি অনুদানও গ্রহণ করে।

// In top-level rp.example:

// Ensure FedCM permission has been granted.
const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://idp.example/fedcm.json',
      clientId: '123',
    }],
  },
  mediation: 'optional',
});

// In an embedded IdP iframe:

// No user gesture is needed to call this, and the call will be auto-granted.
await document.requestStorageAccess();

// This returns `true`.
const hasAccess = await document.hasStorageAccess();

ব্যবহারকারী ফেডসিএমের সাথে সাইন ইন হয়ে গেলে, ফেডসিএম প্রমাণীকরণ সক্রিয় থাকাকালীন অনুমতিটি অটো-গ্রান্ট করা হয়। এর অর্থ হ'ল একবার ব্যবহারকারী সংযোগ বিচ্ছিন্ন হয়ে গেলে, অনুমতি অনুরোধ করা একটি প্রম্পট প্রদর্শন করবে।

মূল পরীক্ষায় অংশ নিন

আপনি ক্রোম ফ্ল্যাগ chrome://flags#fedcm-authz ক্রোম 126 বা তার পরে চালু করে স্থানীয়ভাবে ফেডসিএম ধারাবাহিকতা এপিআই বান্ডিল চেষ্টা করতে পারেন। আপনি ক্রোম 126 বা তার পরে ক্রোম-এ #fedcm-with-storage-access-api চালু করে স্থানীয়ভাবে স্টোরেজ অ্যাক্সেস এপিআইয়ের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএম চেষ্টা করতে পারেন।

এই বৈশিষ্ট্যগুলি মূল পরীক্ষা হিসাবেও উপলব্ধ। মূল পরীক্ষাগুলি আপনাকে নতুন বৈশিষ্ট্যগুলি চেষ্টা করতে এবং তাদের ব্যবহারযোগ্যতা, ব্যবহারিকতা এবং কার্যকারিতা সম্পর্কে প্রতিক্রিয়া জানাতে দেয়। আরও তথ্যের জন্য, মূল পরীক্ষাগুলি দিয়ে শুরু করুন দেখুন।

ফেডসিএম ধারাবাহিকতা এপিআই বান্ডিল অরিজিন ট্রায়াল চেষ্টা করতে, দুটি উত্স ট্রায়াল টোকেন তৈরি করুন:

আপনি যদি বোতাম প্রবাহের সাথে ধারাবাহিকতা এপিআই সক্ষম করতে আগ্রহী হন তবে বোতাম মোড এপিআই উত্সের পরীক্ষাও সক্ষম করুন:

স্টোরেজ অ্যাক্সেস এপিআই উত্স পরীক্ষার জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে ফেডসিএম চেষ্টা করতে:

ধারাবাহিকতা এপিআই বান্ডিল অরিজিন ট্রায়াল এবং ফেডসিএম স্টোরেজ অ্যাক্সেসের জন্য একটি ট্রাস্ট সিগন্যাল হিসাবে এপিআই অরিজিন ট্রায়াল ক্রোম 126 থেকে পাওয়া যায়।

আরপি-র জন্য তৃতীয় পক্ষের উত্স ট্রায়াল নিবন্ধন করুন

  1. অরিজিন ট্রায়াল রেজিস্ট্রেশন পৃষ্ঠায় যান।
  2. রেজিস্টার বোতামটি ক্লিক করুন এবং একটি টোকেনের জন্য অনুরোধ করতে ফর্মটি পূরণ করুন।
  3. ওয়েব উত্স হিসাবে আইডিপির উত্স লিখুন।
  4. অন্যান্য উত্সের জাভাস্ক্রিপ্টের সাথে টোকেন ইনজেকশন করতে তৃতীয় পক্ষের ম্যাচিং পরীক্ষা করুন।
  5. জমা দিন ক্লিক করুন.
  6. তৃতীয় পক্ষের ওয়েবসাইটে জারি করা টোকেন এম্বেড করুন।

তৃতীয় পক্ষের ওয়েবসাইটে টোকেন এম্বেড করতে, আইডিপির জাভাস্ক্রিপ্ট লাইব্রেরি বা এসডিকে আইডিপির উত্স থেকে পরিবেশন করা নিম্নলিখিত কোডটি যুক্ত করুন।

const tokenElement = document.createElement('meta');
tokenElement.httpEquiv = 'origin-trial';
tokenElement.content = 'TOKEN_GOES_HERE';
document.head.appendChild(tokenElement);

আপনার নিজের টোকেন দিয়ে TOKEN_GOES_HERE প্রতিস্থাপন করুন।