আমরা কীভাবে Chrome DevTools WebAuthn ট্যাব তৈরি করেছি

ফাওয়াজ মোহাম্মদ
Fawaz Mohammad
নিনা সাতরাগনো
Nina Satragno

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

বিকাশকারী ব্যথা পয়েন্ট

এই প্রকল্পের আগে, WebAuthn-এর Chrome-এ নেটিভ ডিবাগিং সমর্থনের অভাব ছিল। একজন ডেভেলপার একটি অ্যাপ তৈরি করে যা WebAuth ব্যবহার করে শারীরিক প্রমাণীকরণকারীদের অ্যাক্সেসের প্রয়োজন। এটি দুটি কারণে বিশেষভাবে কঠিন ছিল:

  1. প্রমাণীকরণকারীর বিভিন্ন স্বাদ রয়েছে। কনফিগারেশন এবং ক্ষমতার বিস্তৃতি ডিবাগ করার জন্য ডেভেলপারের কাছে অনেকগুলি ভিন্ন, কখনও কখনও ব্যয়বহুল, প্রমাণীকরণের অ্যাক্সেস থাকা প্রয়োজন।

  2. ভৌত প্রমাণীকরণকারী, নকশা দ্বারা, সুরক্ষিত। অতএব, তাদের রাষ্ট্র পরিদর্শন সাধারণত অসম্ভব।

আমরা সরাসরি Chrome DevTools-এ ডিবাগিং সমর্থন যোগ করে এটিকে আরও সহজ করতে চেয়েছিলাম।

সমাধান: একটি নতুন WebAuthn ট্যাব

WebAuthn DevTools ট্যাবটি ডেভেলপারদের এই প্রমাণীকরণকারীদের অনুকরণ করতে, তাদের ক্ষমতাগুলি কাস্টমাইজ করতে এবং তাদের রাজ্যগুলি পরিদর্শন করার অনুমতি দিয়ে WebAuthn-কে ডিবাগ করা আরও সহজ করে তোলে৷

নতুন WebAuthn ট্যাব

বাস্তবায়ন

WebAuthn-এ ডিবাগিং সমর্থন যোগ করা একটি দুই-অংশের প্রক্রিয়া ছিল।

দুই অংশের প্রক্রিয়া

পার্ট 1: Chrome DevTools প্রোটোকলে WebAuthn ডোমেন যোগ করা

প্রথমত, আমরা Chrome DevTools Protocol (CDP) এ একটি নতুন ডোমেন প্রয়োগ করেছি যা WebAuthn ব্যাকএন্ডের সাথে যোগাযোগ করে এমন একটি হ্যান্ডলারের সাথে যুক্ত।

CDP DevTools ফ্রন্ট-এন্ডকে Chromium-এর সাথে সংযুক্ত করে। আমাদের ক্ষেত্রে, আমরা WebAuthn DevTools ট্যাব এবং Chromium-এর WebAuthn বাস্তবায়নের মধ্যে সেতুবন্ধন করতে WebAuthn ডোমেন অ্যাক্ট ব্যবহার করেছি।

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

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

( কোডটি পড়ুন)

পার্ট 2: ব্যবহারকারী-মুখী ট্যাব তৈরি করা

দ্বিতীয়ত, আমরা DevTools ফ্রন্টএন্ডে একটি ব্যবহারকারী-মুখী ট্যাব তৈরি করেছি। ট্যাবটি একটি ভিউ এবং একটি মডেল দিয়ে তৈরি। একটি স্বয়ংক্রিয়-উত্পন্ন এজেন্ট ডোমেনটিকে ট্যাবের সাথে সংযুক্ত করে।

যদিও 3টি প্রয়োজনীয় উপাদান প্রয়োজন, আমাদের শুধুমাত্র তাদের দুটি সম্পর্কে উদ্বিগ্ন হওয়া দরকার: মডেল এবং ভিউ । 3য় উপাদান - এজেন্ট , ডোমেন যোগ করার পরে স্বয়ংক্রিয়ভাবে তৈরি হয়। সংক্ষেপে, এজেন্ট হল সেই স্তর যা সামনের প্রান্ত এবং CDP-এর মধ্যে কলগুলি বহন করে।

মডেল

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

যাইহোক, আমরা কখনও কখনও মডেলের কাছ থেকে একটি নতুন-তৈরি প্রমাণীকরণকারীর জন্য একটি আইডি প্রদান করতে বা একটি বিদ্যমান প্রমাণীকরণকারীতে সংরক্ষিত শংসাপত্রগুলি ফেরত দেওয়ার জন্য একটি প্রতিক্রিয়া পাঠাই।

( কোডটি পড়ুন)

দৃশ্য

নতুন WebAuthn ট্যাব

আমরা ব্যবহারকারী-ইন্টারফেস প্রদান করতে ভিউ ব্যবহার করি যা একজন ডেভেলপার DevTools অ্যাক্সেস করার সময় খুঁজে পেতে পারে। এতে রয়েছে:

  1. ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করার জন্য একটি টুলবার।
  2. প্রমাণীকরণকারীদের যোগ করার জন্য একটি বিভাগ।
  3. তৈরি প্রমাণীদের জন্য একটি বিভাগ।

( কোডটি পড়ুন)

ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করতে টুলবার

টুলবার

যেহেতু বেশিরভাগ ব্যবহারকারী-ইন্টার্যাকশন সম্পূর্ণ ট্যাবের পরিবর্তে এক সময়ে একটি প্রমাণীকরণকারীর সাথে হয়, তাই টুলবারে আমরা যে কার্যকারিতা প্রদান করি তা হল ভার্চুয়াল পরিবেশকে চালু এবং বন্ধ করা।

কেন এই প্রয়োজন? এটি গুরুত্বপূর্ণ যে ব্যবহারকারীকে স্পষ্টভাবে পরিবেশ টগল করতে হবে কারণ এটি করার ফলে ব্রাউজারটিকে প্রকৃত প্রমাণীকরণকারী আবিষ্কার থেকে সংযোগ বিচ্ছিন্ন করা হয়। অতএব, এটি চালু থাকাকালীন, ফিঙ্গারপ্রিন্ট রিডারের মতো সংযুক্ত শারীরিক প্রমাণীকরণকারীগুলি স্বীকৃত হবে না৷

আমরা সিদ্ধান্ত নিয়েছি যে একটি সুস্পষ্ট টগল মানে একটি ভাল ব্যবহারকারীর অভিজ্ঞতা, বিশেষ করে যারা বাস্তব আবিষ্কার অক্ষম করার আশা না করে WebAuthn ট্যাবে ঘুরে বেড়ান।

প্রমাণীকরণ বিভাগ যোগ করা হচ্ছে

প্রমাণীকরণ বিভাগ যোগ করা হচ্ছে

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

ব্যবহারকারী একবার Add এ ক্লিক করলে, এই বিকল্পগুলিকে বান্ডিল করা হয় এবং মডেলে পাঠানো হয় যা একটি প্রমাণীকরণকারী তৈরি করতে কল করে। একবার এটি সম্পূর্ণ হয়ে গেলে, সামনের প্রান্তটি একটি প্রতিক্রিয়া পাবে এবং তারপরে নতুন তৈরি প্রমাণীকরণকে অন্তর্ভুক্ত করতে UI সংশোধন করবে।

প্রমাণীকরণকারী দৃশ্য

প্রমাণীকরণকারী দৃশ্য

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

প্রমাণীকরণকারীর নাম

প্রমাণীকরণকারীর নামটি কাস্টমাইজযোগ্য এবং ডিফল্ট "প্রমাণকারী" এর আইডির শেষ 5টি অক্ষরের সাথে সংযুক্ত। মূলত, প্রমাণীকরণকারীর নামটি ছিল তার সম্পূর্ণ আইডি এবং অপরিবর্তনীয়। আমরা কাস্টমাইজযোগ্য নামগুলি প্রয়োগ করেছি যাতে ব্যবহারকারী তার ক্ষমতার উপর ভিত্তি করে প্রমাণীকরণকারীকে লেবেল করতে পারে, এটি যে শারীরিক প্রমাণীকরণকে অনুকরণ করার জন্য বোঝানো হয়েছে, বা 36-অক্ষরের আইডির চেয়ে হজম করা কিছুটা সহজ।

শংসাপত্রের টেবিল

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

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

সক্রিয় বোতাম

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

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

সক্রিয় বোতামটি যোগ করার সময় আমরা একটি আকর্ষণীয় চ্যালেঞ্জের মুখোমুখি হয়েছিলাম যা ছিল একটি রেস কন্ডিশন এড়ানো। নিম্নলিখিত দৃশ্যকল্প বিবেচনা করুন:

  1. ব্যবহারকারী প্রমাণীকরণকারী X-এর জন্য সক্রিয় রেডিও বোতামে ক্লিক করে, X কে সক্রিয় হিসাবে সেট করার জন্য CDP-কে একটি অনুরোধ পাঠায়। X-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে, এবং অন্য সবগুলি অনির্বাচিত হয়েছে৷

  2. অবিলম্বে, ব্যবহারকারী প্রমাণীকরণকারী Y-এর জন্য সক্রিয় রেডিও বোতামে ক্লিক করে, Y কে সক্রিয় হিসাবে সেট করার জন্য CDP-কে একটি অনুরোধ পাঠায়। Y-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে, এবং X-এর জন্য সহ অন্য সবগুলি অনির্বাচিত হয়েছে৷

  3. ব্যাকএন্ডে, Y কে সক্রিয় হিসাবে সেট করার কল সম্পূর্ণ এবং সমাধান করা হয়েছে। Y এখন সক্রিয় এবং অন্যান্য সমস্ত প্রমাণীকরণকারী নেই৷

  4. ব্যাকএন্ডে, X কে সক্রিয় হিসাবে সেট করার কলটি সম্পূর্ণ এবং সমাধান করা হয়েছে। X এখন সক্রিয় এবং Y সহ অন্যান্য সমস্ত প্রমাণীকরণকারী নেই।

এখন, ফলাফল পরিস্থিতি নিম্নরূপ: X হল সক্রিয় প্রমাণীকরণকারী। যাইহোক, X-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়নি । Y সক্রিয় প্রমাণীকরণকারী নয় । যাইহোক, Y এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে । সামনের প্রান্ত এবং প্রমাণীকরণকারীদের প্রকৃত অবস্থার মধ্যে একটি মতানৈক্য রয়েছে। স্পষ্টতই, যে একটি সমস্যা.

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

এটি দেখতে কেমন তা এখানে:


 async _setActiveAuthenticator(authenticatorId) {
   await this._clearActiveAuthenticator();
   await this._model.setAutomaticPresenceSimulation(authenticatorId, true);
   this._activeId = authenticatorId;
   this._updateActiveButtons();
 }
 
 _updateActiveButtons() {
   const authenticators = this._authenticatorsView.getElementsByClassName('authenticator-section');
   Array.from(authenticators).forEach(authenticator => {
     authenticator.querySelector('input.dt-radio-button').checked =
         authenticator.getAttribute('data-authenticator-id') === this._activeId;
   });
 }
 
 async _clearActiveAuthenticator() {
   if (this._activeId) {
     await this._model.setAutomaticPresenceSimulation(this._activeId, false);
   }
   this._activeId = null;
 }

ব্যবহারের পরিমাপ

আমরা এই বৈশিষ্ট্যটির ব্যবহার ট্র্যাক করতে চেয়েছিলাম৷ প্রাথমিকভাবে, আমরা দুটি বিকল্প নিয়ে এসেছি।

  1. DevTools-এ WebAuthn ট্যাব খোলার প্রতিবার গণনা করুন । এই বিকল্পটি সম্ভাব্যভাবে অতিরিক্ত গণনার দিকে নিয়ে যেতে পারে, কারণ কেউ আসলে এটি ব্যবহার না করেই ট্যাবটি খুলতে পারে।

  2. টুলবারে "ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করুন" চেকবক্সটি কতবার টগল করা হয়েছে তা ট্র্যাক করুন ৷ এই বিকল্পটিতে একটি সম্ভাব্য অতিরিক্ত গণনা সমস্যা ছিল কারণ কেউ কেউ একই সেশনে একাধিকবার পরিবেশকে চালু এবং বন্ধ করতে পারে।

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

সারাংশ

পড়ার জন্য আপনাকে ধন্যবাদ! WebAuthn ট্যাব উন্নত করার জন্য আপনার যদি কোনো পরামর্শ থাকে, একটি বাগ ফাইল করে আমাদের জানান।

আপনি WebAuthn সম্পর্কে আরও জানতে চাইলে এখানে কিছু সংস্থান রয়েছে:

প্রিভিউ চ্যানেল ডাউনলোড করুন

আপনার ডিফল্ট ডেভেলপমেন্ট ব্রাউজার হিসাবে Chrome Canary , Dev , বা Beta ব্যবহার করার কথা বিবেচনা করুন৷ এই প্রিভিউ চ্যানেলগুলি আপনাকে সর্বশেষ DevTools বৈশিষ্ট্যগুলিতে অ্যাক্সেস দেয়, আপনাকে অত্যাধুনিক ওয়েব প্ল্যাটফর্ম APIগুলি পরীক্ষা করতে দেয় এবং আপনার ব্যবহারকারীদের করার আগে আপনার সাইটে সমস্যাগুলি খুঁজে পেতে সহায়তা করে!

Chrome DevTools টিমের সাথে যোগাযোগ করুন

নতুন বৈশিষ্ট্য, আপডেট বা DevTools সম্পর্কিত অন্য কিছু নিয়ে আলোচনা করতে নিম্নলিখিত বিকল্পগুলি ব্যবহার করুন৷

  • crbug.com এ আমাদের কাছে প্রতিক্রিয়া এবং বৈশিষ্ট্যের অনুরোধ জমা দিন।
  • আরও বিকল্প > সাহায্য > DevTools-এ একটি DevTools সমস্যা রিপোর্ট করুন ব্যবহার করে একটি DevTools সমস্যা রিপোর্ট করুন।
  • @ ChromeDevTools-এ টুইট করুন।
  • DevTools YouTube ভিডিও বা DevTools টিপস YouTube ভিডিওগুলিতে নতুন কী আছে সে সম্পর্কে মন্তব্য করুন৷
,

ফাওয়াজ মোহাম্মদ
Fawaz Mohammad
নিনা সাতরাগনো
Nina Satragno

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

বিকাশকারী ব্যথা পয়েন্ট

এই প্রকল্পের আগে, WebAuthn-এর Chrome-এ নেটিভ ডিবাগিং সমর্থনের অভাব ছিল। একজন ডেভেলপার একটি অ্যাপ তৈরি করে যা WebAuth ব্যবহার করে শারীরিক প্রমাণীকরণকারীদের অ্যাক্সেসের প্রয়োজন। এটি দুটি কারণে বিশেষভাবে কঠিন ছিল:

  1. প্রমাণীকরণকারীর বিভিন্ন স্বাদ রয়েছে। কনফিগারেশন এবং ক্ষমতার বিস্তৃতি ডিবাগ করার জন্য ডেভেলপারের কাছে অনেকগুলি ভিন্ন, কখনও কখনও ব্যয়বহুল, প্রমাণীকরণের অ্যাক্সেস থাকা প্রয়োজন।

  2. ভৌত প্রমাণীকরণকারী, নকশা দ্বারা, সুরক্ষিত। অতএব, তাদের রাষ্ট্র পরিদর্শন সাধারণত অসম্ভব।

আমরা সরাসরি Chrome DevTools-এ ডিবাগিং সমর্থন যোগ করে এটিকে আরও সহজ করতে চেয়েছিলাম।

সমাধান: একটি নতুন WebAuthn ট্যাব

WebAuthn DevTools ট্যাবটি ডেভেলপারদের এই প্রমাণীকরণকারীদের অনুকরণ করতে, তাদের ক্ষমতাগুলি কাস্টমাইজ করতে এবং তাদের রাজ্যগুলি পরিদর্শন করার অনুমতি দিয়ে WebAuthn-কে ডিবাগ করা আরও সহজ করে তোলে৷

নতুন WebAuthn ট্যাব

বাস্তবায়ন

WebAuthn-এ ডিবাগিং সমর্থন যোগ করা একটি দুই-অংশের প্রক্রিয়া ছিল।

দুই অংশের প্রক্রিয়া

পার্ট 1: Chrome DevTools প্রোটোকলে WebAuthn ডোমেন যোগ করা

প্রথমত, আমরা Chrome DevTools Protocol (CDP) এ একটি নতুন ডোমেন প্রয়োগ করেছি যা WebAuthn ব্যাকএন্ডের সাথে যোগাযোগ করে এমন একটি হ্যান্ডলারের সাথে যুক্ত।

CDP DevTools ফ্রন্ট-এন্ডকে Chromium-এর সাথে সংযুক্ত করে। আমাদের ক্ষেত্রে, আমরা WebAuthn DevTools ট্যাব এবং Chromium-এর WebAuthn বাস্তবায়নের মধ্যে সেতুবন্ধন করতে WebAuthn ডোমেন অ্যাক্ট ব্যবহার করেছি।

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

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

( কোডটি পড়ুন)

পার্ট 2: ব্যবহারকারী-মুখী ট্যাব তৈরি করা

দ্বিতীয়ত, আমরা DevTools ফ্রন্টএন্ডে একটি ব্যবহারকারী-মুখী ট্যাব তৈরি করেছি। ট্যাবটি একটি ভিউ এবং একটি মডেল দিয়ে তৈরি। একটি স্বয়ংক্রিয়-উত্পন্ন এজেন্ট ডোমেনটিকে ট্যাবের সাথে সংযুক্ত করে।

যদিও 3টি প্রয়োজনীয় উপাদান প্রয়োজন, আমাদের শুধুমাত্র তাদের দুটি সম্পর্কে উদ্বিগ্ন হওয়া দরকার: মডেল এবং ভিউ । 3য় উপাদান - এজেন্ট , ডোমেন যোগ করার পরে স্বয়ংক্রিয়ভাবে তৈরি হয়। সংক্ষেপে, এজেন্ট হল সেই স্তর যা সামনের প্রান্ত এবং CDP-এর মধ্যে কলগুলি বহন করে।

মডেল

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

যাইহোক, আমরা কখনও কখনও মডেলের কাছ থেকে একটি নতুন-তৈরি প্রমাণীকরণকারীর জন্য একটি আইডি প্রদান করতে বা একটি বিদ্যমান প্রমাণীকরণকারীতে সংরক্ষিত শংসাপত্রগুলি ফেরত দেওয়ার জন্য একটি প্রতিক্রিয়া পাঠাই।

( কোডটি পড়ুন)

দৃশ্য

নতুন WebAuthn ট্যাব

আমরা ব্যবহারকারী-ইন্টারফেস প্রদান করতে ভিউ ব্যবহার করি যা একজন ডেভেলপার DevTools অ্যাক্সেস করার সময় খুঁজে পেতে পারে। এতে রয়েছে:

  1. ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করার জন্য একটি টুলবার।
  2. প্রমাণীকরণকারীদের যোগ করার জন্য একটি বিভাগ।
  3. তৈরি প্রমাণীদের জন্য একটি বিভাগ।

( কোডটি পড়ুন)

ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করতে টুলবার

টুলবার

যেহেতু বেশিরভাগ ব্যবহারকারী-ইন্টার্যাকশন সম্পূর্ণ ট্যাবের পরিবর্তে এক সময়ে একটি প্রমাণীকরণকারীর সাথে হয়, তাই টুলবারে আমরা যে কার্যকারিতা প্রদান করি তা হল ভার্চুয়াল পরিবেশকে চালু এবং বন্ধ করা।

কেন এই প্রয়োজন? এটি গুরুত্বপূর্ণ যে ব্যবহারকারীকে স্পষ্টভাবে পরিবেশ টগল করতে হবে কারণ এটি করার ফলে ব্রাউজারটিকে প্রকৃত প্রমাণীকরণকারী আবিষ্কার থেকে সংযোগ বিচ্ছিন্ন করা হয়। অতএব, এটি চালু থাকাকালীন, ফিঙ্গারপ্রিন্ট রিডারের মতো সংযুক্ত শারীরিক প্রমাণীকরণকারীগুলি স্বীকৃত হবে না৷

আমরা সিদ্ধান্ত নিয়েছি যে একটি সুস্পষ্ট টগল মানে একটি ভাল ব্যবহারকারীর অভিজ্ঞতা, বিশেষ করে যারা বাস্তব আবিষ্কার অক্ষম করার আশা না করে WebAuthn ট্যাবে ঘুরে বেড়ান।

প্রমাণীকরণ বিভাগ যোগ করা হচ্ছে

প্রমাণীকরণ বিভাগ যোগ করা হচ্ছে

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

ব্যবহারকারী একবার Add এ ক্লিক করলে, এই বিকল্পগুলিকে বান্ডিল করা হয় এবং মডেলে পাঠানো হয় যা একটি প্রমাণীকরণকারী তৈরি করতে কল করে। একবার এটি সম্পূর্ণ হয়ে গেলে, সামনের প্রান্তটি একটি প্রতিক্রিয়া পাবে এবং তারপরে নতুন তৈরি প্রমাণীকরণকে অন্তর্ভুক্ত করতে UI সংশোধন করবে।

প্রমাণীকরণকারী দৃশ্য

প্রমাণীকরণকারী দৃশ্য

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

প্রমাণীকরণকারীর নাম

প্রমাণীকরণকারীর নামটি কাস্টমাইজযোগ্য এবং ডিফল্ট "প্রমাণকারী" এর আইডির শেষ 5টি অক্ষরের সাথে সংযুক্ত। মূলত, প্রমাণীকরণকারীর নামটি ছিল তার সম্পূর্ণ আইডি এবং অপরিবর্তনীয়। আমরা কাস্টমাইজযোগ্য নামগুলি প্রয়োগ করেছি যাতে ব্যবহারকারী তার ক্ষমতার উপর ভিত্তি করে প্রমাণীকরণকারীকে লেবেল করতে পারে, এটি যে শারীরিক প্রমাণীকরণকে অনুকরণ করার জন্য বোঝানো হয়েছে, বা 36-অক্ষরের আইডির চেয়ে হজম করা কিছুটা সহজ।

শংসাপত্রের টেবিল

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

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

সক্রিয় বোতাম

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

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

সক্রিয় বোতামটি যোগ করার সময় আমরা একটি আকর্ষণীয় চ্যালেঞ্জের মুখোমুখি হয়েছিলাম যা ছিল একটি রেস কন্ডিশন এড়ানো। নিম্নলিখিত দৃশ্যকল্প বিবেচনা করুন:

  1. ব্যবহারকারী প্রমাণীকরণকারী X-এর জন্য সক্রিয় রেডিও বোতামে ক্লিক করে, X কে সক্রিয় হিসাবে সেট করার জন্য CDP-কে একটি অনুরোধ পাঠায়। X-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে, এবং অন্য সবগুলি অনির্বাচিত হয়েছে৷

  2. অবিলম্বে, ব্যবহারকারী প্রমাণীকরণকারী Y-এর জন্য সক্রিয় রেডিও বোতামে ক্লিক করে, Y কে সক্রিয় হিসাবে সেট করার জন্য CDP-কে একটি অনুরোধ পাঠায়। Y-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে, এবং X-এর জন্য সহ অন্য সবগুলি অনির্বাচিত হয়েছে৷

  3. ব্যাকএন্ডে, Y কে সক্রিয় হিসাবে সেট করার কলটি সম্পূর্ণ এবং সমাধান করা হয়েছে। Y এখন সক্রিয় এবং অন্যান্য সমস্ত প্রমাণীকরণকারী নেই৷

  4. ব্যাকএন্ডে, X কে সক্রিয় হিসাবে সেট করার কলটি সম্পূর্ণ এবং সমাধান করা হয়েছে। X এখন সক্রিয় এবং Y সহ অন্যান্য সমস্ত প্রমাণীকরণকারী নেই।

এখন, ফলাফল পরিস্থিতি নিম্নরূপ: X হল সক্রিয় প্রমাণীকরণকারী। যাইহোক, X-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়নি । Y সক্রিয় প্রমাণীকরণকারী নয় । যাইহোক, Y এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে । সামনের প্রান্ত এবং প্রমাণীকরণকারীদের প্রকৃত অবস্থার মধ্যে একটি মতানৈক্য রয়েছে। স্পষ্টতই, যে একটি সমস্যা.

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

এটি দেখতে কেমন তা এখানে:


 async _setActiveAuthenticator(authenticatorId) {
   await this._clearActiveAuthenticator();
   await this._model.setAutomaticPresenceSimulation(authenticatorId, true);
   this._activeId = authenticatorId;
   this._updateActiveButtons();
 }
 
 _updateActiveButtons() {
   const authenticators = this._authenticatorsView.getElementsByClassName('authenticator-section');
   Array.from(authenticators).forEach(authenticator => {
     authenticator.querySelector('input.dt-radio-button').checked =
         authenticator.getAttribute('data-authenticator-id') === this._activeId;
   });
 }
 
 async _clearActiveAuthenticator() {
   if (this._activeId) {
     await this._model.setAutomaticPresenceSimulation(this._activeId, false);
   }
   this._activeId = null;
 }

ব্যবহারের পরিমাপ

আমরা এই বৈশিষ্ট্যটির ব্যবহার ট্র্যাক করতে চেয়েছিলাম৷ প্রাথমিকভাবে, আমরা দুটি বিকল্প নিয়ে এসেছি।

  1. DevTools-এ WebAuthn ট্যাব খোলার প্রতিবার গণনা করুন । এই বিকল্পটি সম্ভাব্যভাবে অতিরিক্ত গণনার দিকে নিয়ে যেতে পারে, কারণ কেউ আসলে এটি ব্যবহার না করেই ট্যাবটি খুলতে পারে।

  2. টুলবারে "ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করুন" চেকবক্সটি কতবার টগল করা হয়েছে তা ট্র্যাক করুন ৷ এই বিকল্পটিতে একটি সম্ভাব্য অতিরিক্ত গণনা সমস্যা ছিল কারণ কেউ কেউ একই সেশনে একাধিকবার পরিবেশকে চালু এবং বন্ধ করতে পারে।

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

সারাংশ

পড়ার জন্য আপনাকে ধন্যবাদ! WebAuthn ট্যাব উন্নত করার জন্য আপনার যদি কোনো পরামর্শ থাকে, একটি বাগ ফাইল করে আমাদের জানান।

আপনি WebAuthn সম্পর্কে আরও জানতে চাইলে এখানে কিছু সংস্থান রয়েছে:

প্রিভিউ চ্যানেল ডাউনলোড করুন

আপনার ডিফল্ট ডেভেলপমেন্ট ব্রাউজার হিসাবে Chrome Canary , Dev , বা Beta ব্যবহার করার কথা বিবেচনা করুন৷ এই প্রিভিউ চ্যানেলগুলি আপনাকে সর্বশেষ DevTools বৈশিষ্ট্যগুলিতে অ্যাক্সেস দেয়, আপনাকে অত্যাধুনিক ওয়েব প্ল্যাটফর্ম APIগুলি পরীক্ষা করতে দেয় এবং আপনার ব্যবহারকারীদের করার আগে আপনার সাইটে সমস্যাগুলি খুঁজে পেতে সহায়তা করে!

Chrome DevTools টিমের সাথে যোগাযোগ করুন

নতুন বৈশিষ্ট্য, আপডেট বা DevTools সম্পর্কিত অন্য কিছু নিয়ে আলোচনা করতে নিম্নলিখিত বিকল্পগুলি ব্যবহার করুন৷

  • crbug.com এ আমাদের কাছে প্রতিক্রিয়া এবং বৈশিষ্ট্যের অনুরোধ জমা দিন।
  • আরও বিকল্প > সাহায্য > DevTools-এ একটি DevTools সমস্যা রিপোর্ট করুন ব্যবহার করে একটি DevTools সমস্যা রিপোর্ট করুন।
  • @ ChromeDevTools-এ টুইট করুন।
  • DevTools YouTube ভিডিও বা DevTools টিপস YouTube ভিডিওগুলিতে নতুন কী আছে সে সম্পর্কে মন্তব্য করুন৷
,

ফাওয়াজ মোহাম্মদ
Fawaz Mohammad
নিনা সাতরাগনো
Nina Satragno

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

বিকাশকারী ব্যথা পয়েন্ট

এই প্রকল্পের আগে, WebAuthn-এর Chrome-এ নেটিভ ডিবাগিং সমর্থনের অভাব ছিল। একজন ডেভেলপার একটি অ্যাপ তৈরি করে যা WebAuth ব্যবহার করে শারীরিক প্রমাণীকরণকারীদের অ্যাক্সেসের প্রয়োজন। এটি দুটি কারণে বিশেষভাবে কঠিন ছিল:

  1. প্রমাণীকরণকারীর বিভিন্ন স্বাদ রয়েছে। কনফিগারেশন এবং ক্ষমতার বিস্তৃতি ডিবাগ করার জন্য ডেভেলপারের কাছে অনেকগুলি ভিন্ন, কখনও কখনও ব্যয়বহুল, প্রমাণীকরণের অ্যাক্সেস থাকা প্রয়োজন।

  2. ভৌত প্রমাণীকরণকারী, নকশা দ্বারা, সুরক্ষিত। অতএব, তাদের রাষ্ট্র পরিদর্শন সাধারণত অসম্ভব।

আমরা সরাসরি Chrome DevTools-এ ডিবাগিং সমর্থন যোগ করে এটিকে আরও সহজ করতে চেয়েছিলাম।

সমাধান: একটি নতুন WebAuthn ট্যাব

WebAuthn DevTools ট্যাবটি ডেভেলপারদের এই প্রমাণীকরণকারীদের অনুকরণ করতে, তাদের ক্ষমতাগুলি কাস্টমাইজ করতে এবং তাদের রাজ্যগুলি পরিদর্শন করার অনুমতি দিয়ে WebAuthn-কে ডিবাগ করা আরও সহজ করে তোলে৷

নতুন WebAuthn ট্যাব

বাস্তবায়ন

WebAuthn-এ ডিবাগিং সমর্থন যোগ করা একটি দুই-অংশের প্রক্রিয়া ছিল।

দুই অংশের প্রক্রিয়া

পার্ট 1: Chrome DevTools প্রোটোকলে WebAuthn ডোমেন যোগ করা

প্রথমত, আমরা Chrome DevTools Protocol (CDP) এ একটি নতুন ডোমেন প্রয়োগ করেছি যা WebAuthn ব্যাকএন্ডের সাথে যোগাযোগ করে এমন একটি হ্যান্ডলারের সাথে যুক্ত।

CDP DevTools ফ্রন্ট-এন্ডকে Chromium-এর সাথে সংযুক্ত করে। আমাদের ক্ষেত্রে, আমরা WebAuthn DevTools ট্যাব এবং Chromium-এর WebAuthn বাস্তবায়নের মধ্যে সেতুবন্ধন করতে WebAuthn ডোমেন অ্যাক্ট ব্যবহার করেছি।

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

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

( কোডটি পড়ুন)

পার্ট 2: ব্যবহারকারী-মুখী ট্যাব তৈরি করা

দ্বিতীয়ত, আমরা DevTools ফ্রন্টএন্ডে একটি ব্যবহারকারী-মুখী ট্যাব তৈরি করেছি। ট্যাবটি একটি ভিউ এবং একটি মডেল দিয়ে তৈরি। একটি স্বয়ংক্রিয়-উত্পন্ন এজেন্ট ডোমেনটিকে ট্যাবের সাথে সংযুক্ত করে।

যদিও 3টি প্রয়োজনীয় উপাদান প্রয়োজন, আমাদের শুধুমাত্র তাদের দুটি সম্পর্কে উদ্বিগ্ন হওয়া দরকার: মডেল এবং ভিউ । 3য় উপাদান - এজেন্ট , ডোমেন যোগ করার পরে স্বয়ংক্রিয়ভাবে তৈরি হয়। সংক্ষেপে, এজেন্ট হল সেই স্তর যা সামনের প্রান্ত এবং CDP-এর মধ্যে কলগুলি বহন করে।

মডেল

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

যাইহোক, আমরা কখনও কখনও মডেলের কাছ থেকে একটি নতুন-তৈরি প্রমাণীকরণকারীর জন্য একটি আইডি প্রদান করতে বা একটি বিদ্যমান প্রমাণীকরণকারীতে সংরক্ষিত শংসাপত্রগুলি ফেরত দেওয়ার জন্য একটি প্রতিক্রিয়া পাঠাই।

( কোডটি পড়ুন)

দৃশ্য

নতুন WebAuthn ট্যাব

আমরা ব্যবহারকারী-ইন্টারফেস প্রদান করতে ভিউ ব্যবহার করি যা একজন ডেভেলপার DevTools অ্যাক্সেস করার সময় খুঁজে পেতে পারে। এতে রয়েছে:

  1. ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করার জন্য একটি টুলবার।
  2. প্রমাণীকরণকারীদের যোগ করার জন্য একটি বিভাগ।
  3. তৈরি প্রমাণীদের জন্য একটি বিভাগ।

( কোডটি পড়ুন)

ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করতে টুলবার

টুলবার

যেহেতু বেশিরভাগ ব্যবহারকারী-ইন্টার্যাকশন সম্পূর্ণ ট্যাবের পরিবর্তে এক সময়ে একটি প্রমাণীকরণকারীর সাথে হয়, তাই টুলবারে আমরা যে কার্যকারিতা প্রদান করি তা হল ভার্চুয়াল পরিবেশকে চালু এবং বন্ধ করা।

কেন এই প্রয়োজন? এটি গুরুত্বপূর্ণ যে ব্যবহারকারীকে স্পষ্টভাবে পরিবেশ টগল করতে হবে কারণ এটি করার ফলে ব্রাউজারটিকে প্রকৃত প্রমাণীকরণকারী আবিষ্কার থেকে সংযোগ বিচ্ছিন্ন করা হয়। অতএব, এটি চালু থাকাকালীন, ফিঙ্গারপ্রিন্ট রিডারের মতো সংযুক্ত শারীরিক প্রমাণীকরণকারীগুলি স্বীকৃত হবে না৷

আমরা সিদ্ধান্ত নিয়েছি যে একটি সুস্পষ্ট টগল মানে একটি ভাল ব্যবহারকারীর অভিজ্ঞতা, বিশেষ করে যারা বাস্তব আবিষ্কার অক্ষম করার আশা না করে WebAuthn ট্যাবে ঘুরে বেড়ান।

প্রমাণীকরণ বিভাগ যোগ করা হচ্ছে

প্রমাণীকরণ বিভাগ যোগ করা হচ্ছে

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

ব্যবহারকারী একবার Add এ ক্লিক করলে, এই বিকল্পগুলিকে বান্ডিল করা হয় এবং মডেলে পাঠানো হয় যা একটি প্রমাণীকরণকারী তৈরি করতে কল করে। একবার এটি সম্পূর্ণ হয়ে গেলে, সামনের প্রান্তটি একটি প্রতিক্রিয়া পাবে এবং তারপরে নতুন তৈরি প্রমাণীকরণকে অন্তর্ভুক্ত করতে UI সংশোধন করবে।

প্রমাণীকরণকারী দৃশ্য

প্রমাণীকরণকারী দৃশ্য

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

প্রমাণীকরণকারীর নাম

প্রমাণীকরণকারীর নামটি কাস্টমাইজযোগ্য এবং ডিফল্ট "প্রমাণকারী" এর আইডির শেষ 5টি অক্ষরের সাথে সংযুক্ত। মূলত, প্রমাণীকরণকারীর নামটি ছিল তার সম্পূর্ণ আইডি এবং অপরিবর্তনীয়। আমরা কাস্টমাইজযোগ্য নামগুলি প্রয়োগ করেছি যাতে ব্যবহারকারী তার ক্ষমতার উপর ভিত্তি করে প্রমাণীকরণকারীকে লেবেল করতে পারে, এটি যে শারীরিক প্রমাণীকরণকে অনুকরণ করার জন্য বোঝানো হয়েছে, বা 36-অক্ষরের আইডির চেয়ে হজম করা কিছুটা সহজ।

শংসাপত্রের টেবিল

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

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

সক্রিয় বোতাম

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

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

সক্রিয় বোতামটি যোগ করার সময় আমরা একটি আকর্ষণীয় চ্যালেঞ্জের মুখোমুখি হয়েছিলাম যা ছিল একটি রেস কন্ডিশন এড়ানো। নিম্নলিখিত দৃশ্যকল্প বিবেচনা করুন:

  1. ব্যবহারকারী প্রমাণীকরণকারী X-এর জন্য সক্রিয় রেডিও বোতামে ক্লিক করে, X কে সক্রিয় হিসাবে সেট করার জন্য CDP-কে একটি অনুরোধ পাঠায়। X-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে, এবং অন্য সবগুলি অনির্বাচিত হয়েছে৷

  2. অবিলম্বে, ব্যবহারকারী প্রমাণীকরণকারী Y-এর জন্য সক্রিয় রেডিও বোতামে ক্লিক করে, Y কে সক্রিয় হিসাবে সেট করার জন্য CDP-কে একটি অনুরোধ পাঠায়। Y-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে, এবং X-এর জন্য সহ অন্য সবগুলি অনির্বাচিত হয়েছে৷

  3. ব্যাকএন্ডে, Y কে সক্রিয় হিসাবে সেট করার কলটি সম্পূর্ণ এবং সমাধান করা হয়েছে। Y এখন সক্রিয় এবং অন্যান্য সমস্ত প্রমাণীকরণকারী নেই৷

  4. ব্যাকএন্ডে, X কে সক্রিয় হিসাবে সেট করার কলটি সম্পূর্ণ এবং সমাধান করা হয়েছে। X এখন সক্রিয় এবং Y সহ অন্যান্য সমস্ত প্রমাণীকরণকারী নেই।

এখন, ফলাফল পরিস্থিতি নিম্নরূপ: X হল সক্রিয় প্রমাণীকরণকারী। যাইহোক, X-এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়নি । Y সক্রিয় প্রমাণীকরণকারী নয় । যাইহোক, Y এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে । সামনের প্রান্ত এবং প্রমাণীকরণকারীদের প্রকৃত অবস্থার মধ্যে একটি মতানৈক্য রয়েছে। স্পষ্টতই, যে একটি সমস্যা.

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

এটি দেখতে কেমন তা এখানে:


 async _setActiveAuthenticator(authenticatorId) {
   await this._clearActiveAuthenticator();
   await this._model.setAutomaticPresenceSimulation(authenticatorId, true);
   this._activeId = authenticatorId;
   this._updateActiveButtons();
 }
 
 _updateActiveButtons() {
   const authenticators = this._authenticatorsView.getElementsByClassName('authenticator-section');
   Array.from(authenticators).forEach(authenticator => {
     authenticator.querySelector('input.dt-radio-button').checked =
         authenticator.getAttribute('data-authenticator-id') === this._activeId;
   });
 }
 
 async _clearActiveAuthenticator() {
   if (this._activeId) {
     await this._model.setAutomaticPresenceSimulation(this._activeId, false);
   }
   this._activeId = null;
 }

ব্যবহারের পরিমাপ

আমরা এই বৈশিষ্ট্যটির ব্যবহার ট্র্যাক করতে চেয়েছিলাম৷ প্রাথমিকভাবে, আমরা দুটি বিকল্প নিয়ে এসেছি।

  1. DevTools-এ WebAuthn ট্যাব খোলার প্রতিবার গণনা করুন । এই বিকল্পটি সম্ভাব্যভাবে অতিরিক্ত গণনার দিকে নিয়ে যেতে পারে, কারণ কেউ আসলে এটি ব্যবহার না করেই ট্যাবটি খুলতে পারে।

  2. টুলবারে "ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করুন" চেকবক্সটি কতবার টগল করা হয়েছে তা ট্র্যাক করুন ৷ এই বিকল্পের একটি সম্ভাব্য ওভারকাউন্টিং সমস্যাও ছিল কারণ কিছু একই সেশনে একাধিকবার পরিবেশকে টগল করতে পারে।

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

সারাংশ

পড়ার জন্য আপনাকে ধন্যবাদ! ওয়েবআউথন ট্যাবটি উন্নত করার জন্য আপনার যদি কোনও পরামর্শ থাকে তবে আমাদের একটি বাগ ফাইল করে জানান।

আপনি যদি ওয়েবআথন সম্পর্কে আরও জানতে চান তবে এখানে কিছু সংস্থান রয়েছে:

পূর্বরূপ চ্যানেলগুলি ডাউনলোড করুন

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

ক্রোম ডিভটুলস দলের সাথে যোগাযোগ করুন

নতুন বৈশিষ্ট্য, আপডেটগুলি বা ডিভটুলগুলির সাথে সম্পর্কিত অন্য কিছু আলোচনা করতে নিম্নলিখিত বিকল্পগুলি ব্যবহার করুন।

  • Crbug.com এ আমাদের কাছে প্রতিক্রিয়া এবং বৈশিষ্ট্য অনুরোধ জমা দিন।
  • আরও বিকল্প > সহায়তা > ব্যবহার করে একটি ডিভটুলস ইস্যু রিপোর্ট করুন ডিভটুলগুলিতে একটি ডেভটুল ইস্যু রিপোর্ট করুন
  • @ ক্রোমডেভটুলস এ টুইট করুন।
  • ডেভটুলস ইউটিউব ভিডিও বা ডিভটুলস টিপস ইউটিউব ভিডিওগুলিতে নতুন কী সম্পর্কে মন্তব্যগুলি ছেড়ে দিন।
,

ফাওয়াজ মোহাম্মদ
Fawaz Mohammad
নিনা সাতরাগনো
Nina Satragno

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

বিকাশকারী ব্যথা পয়েন্ট

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

  1. প্রমাণীকরণের বিভিন্ন স্বাদ রয়েছে। কনফিগারেশন এবং ক্ষমতাগুলির প্রস্থকে ডিবাগিংয়ের জন্য প্রয়োজনীয়তা তৈরি করা হয়েছিল যে বিকাশকারীকে অনেকগুলি পৃথক, কখনও কখনও ব্যয়বহুল, প্রমাণীকরণকারীদের অ্যাক্সেস রয়েছে।

  2. শারীরিক প্রমাণীকরণকারীগুলি ডিজাইন দ্বারা, সুরক্ষিত। সুতরাং, তাদের রাষ্ট্র পরিদর্শন করা সাধারণত অসম্ভব।

আমরা ক্রোম ডিভটুলগুলিতে ডিবাগিং সমর্থন যুক্ত করে এটি আরও সহজ করতে চেয়েছিলাম।

সমাধান: একটি নতুন ওয়েবআথন ট্যাব

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

নতুন ওয়েবআথন ট্যাব

বাস্তবায়ন

ওয়েবআথনকে ডিবাগিং সমর্থন যুক্ত করা একটি দ্বি-অংশ প্রক্রিয়া ছিল।

দ্বি-অংশ প্রক্রিয়া

অংশ 1: ​​ক্রোম ডিভটুলস প্রোটোকলে ওয়েবআউথন ডোমেন যুক্ত করা হচ্ছে

প্রথমত, আমরা ক্রোম ডেভটুলস প্রোটোকল (সিডিপি) এ একটি নতুন ডোমেন প্রয়োগ করেছি যা একটি হ্যান্ডলারে প্রবেশ করে যা ওয়েবআউথন ব্যাকএন্ডের সাথে যোগাযোগ করে।

সিডিপি ক্রোমিয়ামের সাথে ডিভটুলস ফ্রন্ট-এন্ডকে সংযুক্ত করে। আমাদের ক্ষেত্রে, আমরা ওয়েবআউথন ডোমেন কাজগুলি ওয়েবআউথন ডেভটুলস ট্যাব এবং ক্রোমিয়ামের ওয়েবআথন বাস্তবায়নের মধ্যে ব্রিজ করার জন্য ব্যবহার করেছি।

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

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

( কোডটি পড়ুন)

পার্ট 2: ব্যবহারকারী-মুখী ট্যাব তৈরি করা

দ্বিতীয়ত, আমরা ডিভটুলস ফ্রন্টেন্ডে একটি ব্যবহারকারী-মুখী ট্যাব তৈরি করেছি। ট্যাবটি একটি দৃশ্য এবং একটি মডেল দিয়ে তৈরি। একটি অটো-উত্পাদিত এজেন্ট ডোমেনটিকে ট্যাবের সাথে সংযুক্ত করে।

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

মডেল

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

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

( কোডটি পড়ুন)

দৃশ্য

নতুন ওয়েবআথন ট্যাব

আমরা ব্যবহারকারী-ইন্টারফেস সরবরাহ করতে ভিউটি ব্যবহার করি যা কোনও বিকাশকারী ডিভটুলগুলি অ্যাক্সেস করার সময় খুঁজে পেতে পারে। এতে রয়েছে:

  1. ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করতে একটি সরঞ্জামদণ্ড।
  2. প্রমাণীকরণকারী যুক্ত করার জন্য একটি বিভাগ।
  3. তৈরি প্রমাণীকরণকারীদের জন্য একটি বিভাগ।

( কোডটি পড়ুন)

ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করতে সরঞ্জামদণ্ড

টুলবার

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

কেন এই প্রয়োজন? এটি গুরুত্বপূর্ণ যে ব্যবহারকারীকে স্পষ্টভাবে পরিবেশটি টগল করতে হবে কারণ এটি করা সত্যিকারের প্রমাণীকরণকারী আবিষ্কার থেকে ব্রাউজারটিকে সংযোগ বিচ্ছিন্ন করে। অতএব, এটি চালু থাকাকালীন, ফিঙ্গারপ্রিন্ট রিডারের মতো সংযুক্ত শারীরিক প্রমাণীকরণকারীগুলি স্বীকৃত হবে না।

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

প্রমাণীকরণকারী বিভাগ যুক্ত করা হচ্ছে

প্রমাণীকরণকারী বিভাগ যুক্ত করা হচ্ছে

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

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

প্রমাণীকরণকারী দৃশ্য

প্রমাণীকরণকারী দৃশ্য

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

প্রমাণীকরণের নাম

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

শংসাপত্র টেবিল

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

বর্তমানে, আমরা প্রতিটি প্রমাণীকরণের জন্য নিবন্ধিত শংসাপত্রগুলি পেতে সিডিপি পোল করে এই টেবিলগুলি পূরণ করার জন্য তথ্য সংগ্রহ করি। ভবিষ্যতে, আমরা শংসাপত্র তৈরির জন্য একটি ইভেন্ট যুক্ত করার পরিকল্পনা করছি।

সক্রিয় বোতাম

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

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

সক্রিয় বোতামটি যুক্ত করার সময় আমরা একটি আকর্ষণীয় চ্যালেঞ্জের মুখোমুখি হয়েছি একটি রেসের শর্ত এড়ানো। নিম্নলিখিত দৃশ্যকল্প বিবেচনা করুন:

  1. ব্যবহারকারী প্রামাণিক এক্স এর জন্য সক্রিয় রেডিও বোতাম ক্লিক করে, সিডিপিকে সক্রিয় হিসাবে সেট করার জন্য একটি অনুরোধ প্রেরণ করে। এক্স এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে এবং অন্য সমস্তগুলি নির্বাচিত।

  2. অবিলম্বে, ব্যবহারকারী প্রমাণীকরণকারী ওয়াইয়ের জন্য সক্রিয় রেডিও বোতামটি ক্লিক করে, সিডিপিকে সক্রিয় হিসাবে সেট করার জন্য একটি অনুরোধ প্রেরণ করে। ওয়াইয়ের জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে এবং এক্স সহ অন্যান্য সমস্তগুলি নির্বাচিত হয়।

  3. ব্যাকএন্ডে, সক্রিয় হিসাবে ওয়াই সেট করার কলটি সম্পূর্ণ এবং সমাধান করা হয়েছে। Y এখন সক্রিয় এবং অন্যান্য সমস্ত প্রমাণীকরণকারী নেই।

  4. ব্যাকএন্ডে, সক্রিয় হিসাবে এক্স সেট করার কলটি সম্পূর্ণ এবং সমাধান করা হয়েছে। এক্স এখন সক্রিয় এবং y সহ অন্যান্য সমস্ত প্রমাণীকরণকারী নয়।

এখন, ফলস্বরূপ পরিস্থিতি নিম্নরূপ: এক্স সক্রিয় প্রমাণীকরণকারী। তবে এক্স এর জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়নি । Y সক্রিয় প্রমাণীকরণকারী নয় । তবে ওয়াইয়ের জন্য সক্রিয় রেডিও বোতামটি নির্বাচন করা হয়েছে । সামনের প্রান্ত এবং প্রমাণীকরণের প্রকৃত স্থিতির মধ্যে মতবিরোধ রয়েছে। স্পষ্টতই, এটি একটি সমস্যা।

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

এটি দেখতে কেমন তা এখানে:


 async _setActiveAuthenticator(authenticatorId) {
   await this._clearActiveAuthenticator();
   await this._model.setAutomaticPresenceSimulation(authenticatorId, true);
   this._activeId = authenticatorId;
   this._updateActiveButtons();
 }
 
 _updateActiveButtons() {
   const authenticators = this._authenticatorsView.getElementsByClassName('authenticator-section');
   Array.from(authenticators).forEach(authenticator => {
     authenticator.querySelector('input.dt-radio-button').checked =
         authenticator.getAttribute('data-authenticator-id') === this._activeId;
   });
 }
 
 async _clearActiveAuthenticator() {
   if (this._activeId) {
     await this._model.setAutomaticPresenceSimulation(this._activeId, false);
   }
   this._activeId = null;
 }

ব্যবহারের পরিমাপ

আমরা এই বৈশিষ্ট্যটির ব্যবহার ট্র্যাক করতে চেয়েছিলাম। প্রাথমিকভাবে, আমরা দুটি বিকল্প নিয়ে এসেছি।

  1. প্রতিবার ডিভটুলগুলিতে ওয়েবআউথন ট্যাবটি খোলার সময় গণনা করুন । এই বিকল্পটি সম্ভাব্যভাবে ওভারকাউন্টিংয়ের দিকে নিয়ে যেতে পারে, কারণ কেউ আসলে এটি ব্যবহার না করেই ট্যাবটি খুলতে পারে।

  2. সরঞ্জামদণ্ডে "ভার্চুয়াল প্রমাণীকরণকারী পরিবেশ সক্ষম করুন" চেকবক্সটি টগল করা হয়েছে তার সংখ্যা কতবার ট্র্যাক করুন । এই বিকল্পের একটি সম্ভাব্য ওভারকাউন্টিং সমস্যাও ছিল কারণ কিছু একই সেশনে একাধিকবার পরিবেশকে টগল করতে পারে।

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

সারাংশ

পড়ার জন্য আপনাকে ধন্যবাদ! ওয়েবআউথন ট্যাবটি উন্নত করার জন্য আপনার যদি কোনও পরামর্শ থাকে তবে আমাদের একটি বাগ ফাইল করে জানান।

আপনি যদি ওয়েবআথন সম্পর্কে আরও জানতে চান তবে এখানে কিছু সংস্থান রয়েছে:

পূর্বরূপ চ্যানেলগুলি ডাউনলোড করুন

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

ক্রোম ডিভটুলস দলের সাথে যোগাযোগ করুন

নতুন বৈশিষ্ট্য, আপডেটগুলি বা ডিভটুলগুলির সাথে সম্পর্কিত অন্য কিছু আলোচনা করতে নিম্নলিখিত বিকল্পগুলি ব্যবহার করুন।

  • Crbug.com এ আমাদের কাছে প্রতিক্রিয়া এবং বৈশিষ্ট্য অনুরোধ জমা দিন।
  • আরও বিকল্প > সহায়তা > ব্যবহার করে একটি ডিভটুলস ইস্যু রিপোর্ট করুন ডিভটুলগুলিতে একটি ডেভটুল ইস্যু রিপোর্ট করুন
  • @ ক্রোমডেভটুলস এ টুইট করুন।
  • ডেভটুলস ইউটিউব ভিডিও বা ডিভটুলস টিপস ইউটিউব ভিডিওগুলিতে নতুন কী সম্পর্কে মন্তব্যগুলি ছেড়ে দিন।