FedCM আপডেট: ডোমেন ইঙ্গিত API

Chrome 123 থেকে, আপনি Federated Credential Management API (FedCM) এর পাশাপাশি ডোমেন ইঙ্গিতগুলি ব্যবহার করতে পারেন৷ ডোমেন ইঙ্গিত API-এর সাথে, বিকাশকারীরা তাদের গ্রহণ করা ডোমেন থেকে শুধুমাত্র ফেডারেটেড লগইন অ্যাকাউন্টগুলি দেখিয়ে আরও ভাল ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে পারে।

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

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

ডোমেন হিন্ট API-এর সাথে, RPs ব্যবহারকারীর জন্য শুধুমাত্র মিলে যাওয়া অ্যাকাউন্টগুলি দেখানোর জন্য একটি FedCM API কলে একটি domainHint সম্পত্তি নির্দিষ্ট করতে পারে। আইডিপি কোন ডোমেনের সাথে একটি অ্যাকাউন্ট যুক্ত তা নির্দেশ করতে অ্যাকাউন্ট তালিকার শেষ পয়েন্ট থেকে প্রতিক্রিয়ার অংশ হিসাবে একটি domain_hints সম্পত্তি প্রদান করতে পারে। এইভাবে, ব্রাউজারটি আইডিপি-তে অনুরোধ করা ডোমেন ইঙ্গিত প্রকাশ না করে মিলে যাওয়া অ্যাকাউন্টগুলি দেখাতে পারে।

অ্যাকাউন্ট তালিকার শেষ পয়েন্ট থেকে একটি উদাহরণ JSON প্রতিক্রিয়া নিম্নলিখিত মত দেখাবে:

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

অ্যাকাউন্টগুলি ফিল্টার করার জন্য RP একটি domainHint বৈশিষ্ট্য সহ navigator.credentials.get() কল করতে পারে। উদাহরণস্বরূপ, বলুন একজন ব্যবহারকারী corp-partner.example এ যান এবং corp.example থেকে একটি অ্যাকাউন্ট দিয়ে সাইন ইন করেন। সাইটটি নিম্নরূপ API-কে আহ্বান করবে:

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

domainHint মানটি সার্ভার সাইড ফিল্টারিংয়ের জন্য অ্যাকাউন্ট তালিকার এন্ডপয়েন্টে পাঠানো হয় না, কারণ এটি আইডিপিতে একটি ফিঙ্গারপ্রিন্টিং ভেক্টর হতে পারে। পরিবর্তে, Chrome যথারীতি একটি FedCM অনুরোধ সম্পাদন করে এবং navigator.credentials.get() কল দ্বারা নির্দিষ্ট domainHint মানের সাথে মেলে না এমন অ্যাকাউন্টগুলিকে ফিল্টার করে৷ তারপরে, Chrome নতুন অ্যাকাউন্টের তালিকা সহ ব্যবহারকারীকে FedCM ডায়ালগ দেখায়। এই পদ্ধতিটি লগইন ইঙ্গিত API এর অনুরূপ, কিন্তু এই দুটি API বিভিন্ন প্রশ্নের উত্তর দেয়। লগইন ইঙ্গিত API-এর লক্ষ্য হল "আমি যে ব্যবহারকারীকে চাই তার জন্য কোন শনাক্তকারী?" উত্তর দেওয়া, যখন ডোমেন ইঙ্গিত উত্তর দেয় "এই অ্যাকাউন্টটি অবশ্যই কোন কর্পোরেশন বা সার্ভারের অন্তর্গত?"।

যখন domainHint: "any" ব্যবহার করা হয়, তখন Chrome সেই অ্যাকাউন্টগুলিকে ফিল্টার করে দেয় যেগুলির কোনও ডোমেন নেই (অর্থাৎ, domain_hints পাস করা হয় না বা খালি থাকে)৷ উদাহরণস্বরূপ, এটি এমন ক্ষেত্রে ব্যবহারের অনুমতি দেয় যেখানে RP শুধুমাত্র তার সাইনআপ প্রক্রিয়ায় পরিচালিত অ্যাকাউন্টগুলিকে অনুমতি দেয়।

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

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