FedCM আপডেট: API এবং দুটি আপডেট সংযোগ বিচ্ছিন্ন করুন

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

API সংযোগ বিচ্ছিন্ন করুন

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

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

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

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

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

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

আইডিপি কনফিগারেশন ফাইল সেট আপ করুন

সংযোগ বিচ্ছিন্ন এপিআই সমর্থন করার জন্য, আইডিপিকে অবশ্যই একটি সংযোগ বিচ্ছিন্ন এন্ডপয়েন্ট সমর্থন করতে হবে এবং তার আইডিপি কনফিগ ফাইলে disconnect_endpoint বৈশিষ্ট্য এবং এর পথ প্রদান করতে হবে।

{
  "accounts_endpoint": "/accounts",
  "id_assertion_endpoint": "/assertion",
  ...
  "disconnect_endpoint: "/disconnect"
}

সংযোগ বিচ্ছিন্ন এন্ডপয়েন্টে অ্যাকাউন্টটি সংযোগ বিচ্ছিন্ন করুন

IdentityCredential.disconnect() চালু করার মাধ্যমে, ব্রাউজার কুকি সহ একটি ক্রস-অরিজিন POST অনুরোধ পাঠায় এবং নিম্নলিখিত তথ্য সহ এই সংযোগ বিচ্ছিন্ন প্রান্তবিন্দুতে একটি বিষয়বস্তু-টাইপ application/x-www-form-urlencoded পাঠায়:

সম্পত্তি বর্ণনা
account_hint আইডিপি অ্যাকাউন্টের জন্য একটি ইঙ্গিত।
client_id RP-এর ক্লায়েন্ট শনাক্তকারী।
POST /disconnect HTTP/1.1
Host: idp.example
Origin: rp.example
Content-Type: application/x-www-form-urlencoded
Cookie: 0x123
Sec-Fetch-Dest: webidentity

account_hint=account456&client_id=rp123

অনুরোধ পাওয়ার পর, আইডিপি সার্ভারের উচিত:

  1. CORS (ক্রস-অরিজিন রিসোর্স শেয়ারিং) এর সাথে অনুরোধে সাড়া দিন।
  2. যাচাই করুন যে অনুরোধটিতে একটি Sec-Fetch-Dest: webidentity HTTP হেডার রয়েছে।
  3. client_id দ্বারা নির্ধারিত RP অরিজিনের সাথে Origin হেডারের সাথে মিল করুন। যদি তারা মেলে না তাহলে প্রত্যাখ্যান করুন।
  4. account_hint সাথে মেলে এমন অ্যাকাউন্ট খুঁজুন।
  5. RP এর সংযুক্ত অ্যাকাউন্টের তালিকা থেকে ব্যবহারকারীর অ্যাকাউন্টটি সংযোগ বিচ্ছিন্ন করুন।
  6. একটি JSON ফর্ম্যাটে চিহ্নিত ব্যবহারকারীর account_id সহ ব্রাউজারে উত্তর দিন।

একটি উদাহরণ প্রতিক্রিয়া JSON পেলোড এই মত দেখায়:

{
  "account_id": "account456"
}

যদি আইডিপি ব্রাউজারটি RP-এর সাথে যুক্ত সমস্ত অ্যাকাউন্ট সংযোগ বিচ্ছিন্ন করতে চায়, তাহলে একটি স্ট্রিং পাস করুন যা কোনো অ্যাকাউন্ট আইডির সাথে মেলে না, উদাহরণস্বরূপ "*"

RP এবং IdP একই-সাইট হলে /.well-known/web-identity চেক করা এখন এড়িয়ে যায়

একটি FedCM সিস্টেম ডেভেলপ করার সময়, RP সার্ভার ডোমেন পরীক্ষা করা বা স্টেজ করা উৎপাদন আইডিপি সার্ভারের সাবডোমেন হতে পারে। উদাহরণস্বরূপ, প্রোডাকশন আইডিপি সার্ভারটি idp.example এ রয়েছে এবং স্টেজিং RP সার্ভার এবং স্টেজিং IdP সার্ভার উভয়ই staging.idp.example এ রয়েছে। যাইহোক, যেহেতু সুপরিচিত ফাইলটি অবশ্যই আইডিপি সার্ভারের eTLD+1 এর মূলে রাখতে হবে, তাই এটি idp.example/.well-known/web-identity এ থাকতে হবে এবং এটি প্রোডাকশন সার্ভার। যেহেতু ডেভেলপারদের পক্ষে ডেভেলপমেন্টের সময় প্রোডাকশন এনভায়রনমেন্টে ফাইল স্থাপন করা অগত্যা সম্ভব নয়, তাই এটি তাদের FedCM পরীক্ষা করতে বাধা দেয়।

Chrome 122 থেকে শুরু করে, যদি RP ডোমেন এবং IdP ডোমেন একই হয়, Chrome সুপরিচিত ফাইলটি পরীক্ষা করা এড়িয়ে যায়। এইভাবে, বিকাশকারীরা এই জাতীয় পরিস্থিতিতে পরীক্ষা করতে সক্ষম হবেন।

Subresources এখন একই-সাইট লগইন স্থিতি সেট করতে পারে

পূর্বে, ক্রোম শুধুমাত্র লগইন স্থিতি সেট করার অনুমতি দিয়েছে (উদাহরণস্বরূপ, Set-Login: logged-in শিরোনাম ব্যবহার করে) যখন অনুরোধটি সমস্ত পূর্বপুরুষের সাথে একই-অরিজিন হয়। এটি একই-সাইট fetch() অনুরোধ লগইন স্থিতি সেটিং এর মাধ্যমে লগইন প্রতিরোধ করে।

উদাহরণস্বরূপ, এমন একটি ওয়েবসাইট সম্পর্কে চিন্তা করুন যা ব্যবহারকারীদের idp.example এ তাদের ব্যবহারকারীর নাম এবং পাসওয়ার্ড লিখতে দেয়, কিন্তু শংসাপত্রগুলি fetch() সহ login.idp.example এ পোস্ট করা হয়। লগইন স্ট্যাটাস API ব্যবহার করে ব্রাউজারে লগইন স্থিতি রেকর্ড করা সম্ভব হয়নি কারণ দুটি ডোমেন ক্রস-অরিজিন এবং একই-সাইট।

এই পরিবর্তনের সাথে, আমরা সমস্ত পূর্বপুরুষের সাথে একই-সাইট হওয়ার জন্য লগইন স্থিতি API-এর প্রয়োজনীয়তা শিথিল করেছি এবং উপরের উদাহরণটিকে একটি HTTP হেডার ব্যবহার করে login.idp.example এর লগইন স্থিতি সেট করা সম্ভব করে তুলেছি ( Set-Login: logged-in )।

সারাংশ

সংযোগ বিচ্ছিন্ন API ব্যবহার করে, FedCM এখন তৃতীয় পক্ষের কুকির উপর নির্ভর না করে আইডিপি থেকে RP-কে সংযোগ বিচ্ছিন্ন করতে পারে। এটি করতে, RP-এ IdentityCredential.disconnect() এ কল করুন। এই ফাংশনের সাহায্যে, ব্রাউজারটি আইডিপির সংযোগ বিচ্ছিন্ন শেষ পয়েন্টে একটি অনুরোধ পাঠায় যাতে আইডিপি সার্ভারে এবং তারপর ব্রাউজারে সংযোগটি বন্ধ করতে পারে।

আমরা ঘোষণা করেছি যে /.well-known/web-identity চেক বাদ দেওয়া হয় যখন RP এবং IdP একই-সাইট হয়, পরীক্ষার উদ্দেশ্যে। এছাড়াও, একই-সাইট আইডিপি সাবরিসোর্স থেকে একটি HTTP প্রতিক্রিয়া শিরোনামের মাধ্যমে একটি লগইন অবস্থা সেট করা এখন সম্ভব।