প্রকাশিত: আগস্ট 19, 2025
WebAuthn অবিলম্বে মধ্যস্থতা হল একটি নতুন ওয়েব ক্ষমতা যা ব্যবহারকারীর সাইন-ইন প্রবাহকে স্ট্রীমলাইন করার জন্য ডিজাইন করা হয়েছে। এই অরিজিন ট্রায়ালটি বৈশিষ্ট্য, এর সুবিধা এবং বাস্তবায়নের বিশদ বিবরণের একটি ওভারভিউ প্রদান করে, আপনাকে অংশগ্রহণ করার জন্য আমন্ত্রণ জানায় এবং ওয়েব প্রমাণীকরণের ভবিষ্যত গঠনে সহায়তা করে।
পটভূমি
ওয়েবে প্রমাণীকরণ প্রায়ই ঘর্ষণ প্রবর্তন করে, ব্যবহারকারী সাইন-ইনকে জটিল করে তোলে। বিদ্যমান WebAuthn প্রবাহ, শক্তিশালী হলেও, "সাইন-ইন" বোতামগুলির সাথে লড়াই করে, বিশেষ করে যখন শংসাপত্রগুলি অবিলম্বে উপলব্ধ না হয়, যার ফলে স্ট্যান্ডার্ড ফর্ম ফলব্যাক হয়৷
এই নতুন বৈশিষ্ট্যটি মোবাইলে preferImmediatelyAvailableCredentials
API-এর মতো একটি কম-ঘর্ষণ সাইন-ইন প্রবাহ প্রবর্তন করে। এটি সাইন-ইনকে সহজ করে তোলে, প্রায়ই স্ট্যান্ডার্ড লগইন ফর্মের আগে, ঘর্ষণ কমিয়ে এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে৷
এটা কিভাবে কাজ করে
WebAuthn অবিলম্বে মধ্যস্থতা একটি আরও সরাসরি এবং দক্ষ সাইন-ইন অভিজ্ঞতা সক্ষম করে৷ এটি ব্রাউজারকে অবিলম্বে উপলব্ধ শংসাপত্রগুলি অফার করতে বা ক্রস-ডিভাইস বা নিরাপত্তা কী প্রমাণীকরণের জন্য অনুরোধ না করে অবিলম্বে তাদের অনুপস্থিতির সংকেত দেওয়ার অনুমতি দেয়, যা বিকাশকারীদের জন্য বাস্তবায়নকে সহজ করে।
immediate
মধ্যস্থতার ধরন
আমরা navigator.credentials.get()
অনুরোধের জন্য একটি immediate
মধ্যস্থতার ধরন চালু করছি। যখন এই বিকল্পটি সেট করা হয়, স্থানীয়ভাবে-উপলভ্য শংসাপত্র না পাওয়া গেলে প্রতিশ্রুতি NotAllowedError
দিয়ে প্রত্যাখ্যান করে। শংসাপত্র উপস্থিত থাকলে, ব্রাউজারটি স্বাভাবিক হিসাবে প্রমাণীকরণ প্রক্রিয়া পরিচালনা করে।
এই নমনীয়তা সাইটগুলিকে তাদের সাইন-ইন প্রবাহকে খাপ খাইয়ে নিতে দেয়, যখন অবিলম্বে শংসাপত্রগুলি উপলব্ধ না হয় তখন সুন্দরভাবে বিকল্প পদ্ধতি প্রদান করে৷
গুরুত্বপূর্ণভাবে, ব্রাউজারগুলি এখনও ব্যবহারকারীর গোপনীয়তা এবং নিরাপত্তা বজায় রাখতে NotAllowedError
ফেরত দিতে পারে, আঙ্গুলের ছাপ বা ট্র্যাকিংয়ের মতো সমস্যাগুলি প্রতিরোধ করে৷
বৈশিষ্ট্য সনাক্তকরণ
PublicKeyCredential.getClientCapabilities()
ব্যবহার করে আপনি তাৎক্ষণিক মধ্যস্থতা উপলব্ধ কিনা তা সনাক্ত করতে পারেন। ডেভেলপাররা রিটার্ন করা capabilities
অবজেক্টে immediateGet
ক্যাপাবিলিটি চেক করতে পারেন।
async function checkImmediateMediationAvailability() {
try {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities.immediateGet && window.PasswordCredential) {
console.log("Immediate Mediation with passwords supported.");
} else if (capabilities.immediateGet) {
console.log("Immediate Mediation without passwords supported.");
} else { console.log("Immediate Mediation unsupported."); }
} catch (error) {
console.error("Error getting client capabilities:", error);
}
}
দ্রষ্টব্য: বৃহত্তর ব্রাউজার সমর্থনে সহায়তা করার জন্য, WebAuthn Polyfills GitHub সংগ্রহস্থল থেকে getClientCapabilities()
এর জন্য একটি পলিফিল উপলব্ধ।
উদাহরণ বাস্তবায়ন
API ব্যবহার করতে, মধ্যস্থতা সহ navigator.credentials.get()
এ কল করুন mediation: 'immediate'
। আমরা password: true
, কারণ বেশিরভাগ ব্যবহারকারীর কাছে সম্ভবত আজ সংরক্ষিত পাসওয়ার্ড রয়েছে এবং এই অভিজ্ঞতা থেকে অবিলম্বে উপকৃত হতে পারেন।
button.addEventListener('click', async (event) => {
event.preventDefault();
event.stopPropagation();
const cred = await navigator.credentials.get({
password: true,
publicKey: {
challenge, // Your server-generated challenge
rpId: 'example.com' // Your Relying Party ID
},
mediation: 'immediate',
});
});
একটি আকর্ষণীয় ফলব্যাক সাইন-ইন অভিজ্ঞতা প্রদান করতে বিকাশকারীদের একটি catch
ব্লকে NotAllowedError
পরিচালনা করা উচিত।
অবিলম্বে মধ্যস্থতার জন্য একটি ধাপে ধাপে প্রবাহ
WebAuthn অবিলম্বে মধ্যস্থতা ব্যবহারকারীর সাইন-ইন স্ট্রীমলাইন করার জন্য দুটি প্রাথমিক ব্যবহারের ক্ষেত্রে সমর্থন করে: একটি ডেডিকেটেড "পাসকি দিয়ে সাইন ইন করুন" বোতাম সক্রিয় করা যা অবাঞ্ছিত ফলব্যাক বিকল্পগুলিকে দমন করে, এবং একটি গতিশীল সাইন-ইন প্রবাহকে সহজ করে যা ব্যবহারকারী-সমালোচনামূলক পদক্ষেপের আগে সক্রিয়ভাবে শংসাপত্রগুলি অফার করে৷
কেস 1 ব্যবহার করুন: সাইন-ইন বোতাম দিয়ে স্পষ্ট সাইন ইন করুন
এই দৃশ্যটি একটি নিবেদিত সাইন-ইন বোতাম প্রদানের উপর ফোকাস করে, অপ্রত্যাশিত প্রম্পট ছাড়াই একটি পরিষ্কার ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করা বা সাইন-ইন পৃষ্ঠার মধ্য দিয়ে যাওয়া।
- ব্যবহারকারী সাইন-ইন শুরু করে: ব্যবহারকারী একটি "সাইন ইন" বোতামে ক্লিক করে। নির্ভরকারী পক্ষ তখন মধ্যস্থতা সহ
navigator.credentials.get()
কল করেmediation: "immediate"
। - শংসাপত্র নির্বাচনের জন্য ব্রাউজার প্রম্পট (যদি পাওয়া যায়): ব্রাউজার স্থানীয়ভাবে উপলভ্য পাসকি বা অনুরোধ করা পাসওয়ার্ড পরীক্ষা করে। যদি এটি কোন খুঁজে পায়, এটি অবিলম্বে একটি অ্যাকাউন্ট চয়ন করার জন্য ব্যবহারকারীর জন্য একটি মডেল UI উপস্থাপন করে৷ অ্যাকাউন্টগুলি শেষ-ব্যবহৃত টাইমস্ট্যাম্প দ্বারা র্যাঙ্ক করা হয়, তারপরে বর্ণানুক্রমিকভাবে। দ্রষ্টব্য : যদি একই অ্যাকাউন্টের জন্য একাধিক পাসওয়ার্ড পরিচালকের পাসওয়ার্ড এবং পাসকি উভয়ই পাওয়া যায়, ব্রাউজার পাসকিগুলিকে অগ্রাধিকার দেয়। যখন বিভিন্ন প্রদানকারীর থেকে একই অ্যাকাউন্টের জন্য একাধিক পাসকি বিদ্যমান থাকে, তখন সর্বশেষ ব্যবহৃত পাসকিটিকে অগ্রাধিকার দেওয়া হয়।
- সফল সাইন-ইন: ব্যবহারকারী ব্রাউজার UI থেকে পাসকি নির্বাচন করে। ব্রাউজারটির যাচাইকরণের প্রয়োজন হলে, এটি ব্যবহারকারীকে তাদের পূর্বে সেট আপ পদ্ধতি (যেমন একটি পিন, বায়োমেট্রিক ইনপুট বা প্যাটার্ন) ব্যবহার করে তাদের পরিচয় যাচাই করতে অনুরোধ করে। সাইন-ইন সফলভাবে সম্পন্ন হয়েছে৷
- ফলব্যাক পাথ: কোনো পাসকি বা ব্যবহারকারীর বরখাস্ত না: যদি সাইটের জন্য কোনো স্থানীয় পাসকি বা অনুরোধ করা পাসওয়ার্ড উপলব্ধ না থাকে, অথবা ব্যবহারকারী যদি ব্রাউজার UI খারিজ করে, ব্রাউজার নির্ভরকারী পক্ষের কাছে একটি
NotAllowedError
ছুড়ে দেয় এবং ব্রাউজার ক্রস-ডিভাইস বা নিরাপত্তা কী বিকল্পের জন্য কোনো UI দেখায় না। নির্ভরকারী পক্ষ তার স্ট্যান্ডার্ড সাইন-ইন পৃষ্ঠার সাথে এগিয়ে যেতে পারে বা বিকল্প প্রমাণীকরণ প্রক্রিয়া অফার করতে পারে।
কেস 2 ব্যবহার করুন: ব্যবহারকারীর অ্যাকশনের আগে অন্তর্নিহিত সাইন-ইন প্রবাহ
এই দৃশ্যটি একটি সক্রিয় সাইন-ইন অভিজ্ঞতা সক্ষম করে, পাসকি এবং পাসওয়ার্ড অফার করে একটি ব্যবহারকারী এমন একটি ক্রিয়া সম্পাদন করার আগে যার জন্য একটি প্রমাণীকৃত অবস্থার প্রয়োজন হয়, যেমন চেক আউট।
- ব্যবহারকারী সাইন-ইন করার জন্য প্রয়োজনীয় ক্রিয়া শুরু করে: ব্যবহারকারী একটি ক্রিয়াকলাপের জন্য একটি বোতামে ক্লিক করে যার জন্য তাদের সাইন ইন করা প্রয়োজন (উদাহরণস্বরূপ, একটি "চেকআউট" বোতাম)। নির্ভরকারী পক্ষ তখন মধ্যস্থতা সহ
navigator.credentials.get()
কল করেmediation: "immediate"
। শংসাপত্র নির্বাচনের জন্য ব্রাউজার প্রম্পট (যদি পাওয়া যায়): ব্রাউজার স্থানীয়ভাবে উপলভ্য পাসকি বা পাসওয়ার্ড পরীক্ষা করে। যদি এটি তাদের খুঁজে পায়, এটি অবিলম্বে ব্যবহারকারীর জন্য একটি অ্যাকাউন্ট চয়ন করার জন্য একটি মডেল UI উপস্থাপন করে৷ অ্যাকাউন্টগুলিকে সর্বশেষ-ব্যবহৃত টাইমস্ট্যাম্প দ্বারা র্যাঙ্ক করা হয়, তারপরে বর্ণানুক্রমিকভাবে, এবং প্রতি অ্যাকাউন্টে একটি একক এন্ট্রি দেখানোর জন্য অনুলিপি করা হয়। দ্রষ্টব্য : যখন একই অ্যাকাউন্টের জন্য একাধিক পাসওয়ার্ড পরিচালকের পাসওয়ার্ড এবং পাসকি উভয়ই পাওয়া যায়, তখন ব্রাউজার পাসকিগুলিকে অগ্রাধিকার দেয়৷ যখন বিভিন্ন প্রদানকারীর থেকে একই অ্যাকাউন্টের জন্য একাধিক পাসকি বিদ্যমান থাকে, তখন সর্বশেষ ব্যবহৃত পাসকিটিকে অগ্রাধিকার দেওয়া হয়।
সফল সাইন-ইন: ব্যবহারকারী ব্রাউজার UI থেকে একটি শংসাপত্র নির্বাচন করে। ব্রাউজারটির যাচাইকরণের প্রয়োজন হলে, এটি ব্যবহারকারীকে তাদের পূর্বে সেট আপ পদ্ধতি (যেমন একটি পিন, বায়োমেট্রিক ইনপুট বা প্যাটার্ন) ব্যবহার করে তাদের পরিচয় যাচাই করতে অনুরোধ করে। সাইন-ইন সফলভাবে সম্পন্ন হয়েছে৷
ফলব্যাক পাথ: কোনও শংসাপত্র বা ব্যবহারকারীর বরখাস্ত করা নেই: যদি সাইটের জন্য কোনও স্থানীয় শংসাপত্র উপলব্ধ না থাকে, বা ব্যবহারকারী যদি ব্রাউজার UI খারিজ করে, ব্রাউজার নির্ভরকারী পক্ষের কাছে একটি
NotAllowedError
ছুড়ে দেয় এবং ব্রাউজার কোনও UI দেখায় না। ব্যবহারকারীর সাইন-ইন অভিজ্ঞতা আজ থেকে অপরিবর্তিত থাকবে। নির্ভরকারী পক্ষ ব্যবহারকারীকে আরও বিশদ বিবরণের জন্য জিজ্ঞাসা করতে পারে (উদাহরণস্বরূপ, ইমেল ঠিকানা) বা বিকল্প প্রমাণীকরণ প্রক্রিয়া যেমন একটি পাসওয়ার্ড ফর্ম, এসএমএস যাচাইকরণ, বা একটি WebAuthn মডেল অনুরোধ দেখাতে পারে যা ক্রস-ডিভাইস প্রমাণীকরণকে সমর্থন করে।
সুবিধা
WebAuthn অবিলম্বে মধ্যস্থতা ডেভেলপার এবং ব্যবহারকারীদের জন্য বেশ কয়েকটি মূল সুবিধা প্রদান করে:
- ঘর্ষণহীন সাইন-ইন: এটি ব্যবহারকারীদের জন্য একটি মসৃণ, নিম্ন-ঘর্ষণ সাইন-ইন অভিজ্ঞতা প্রদান করে যাদের ব্রাউজারে বা পাসওয়ার্ড ম্যানেজারে সংরক্ষিত পাসকি বা পাসওয়ার্ডগুলি অবিলম্বে উপলব্ধ রয়েছে৷
- ইন্টেলিজেন্ট সাইন-ইন: ব্যবহারকারী যখন এমন ক্রিয়াকলাপ সম্পাদন করতে চায় যেগুলির জন্য তাদের সাইন ইন করা প্রয়োজন তখন API একটি সাইন-ইন প্রবাহ সক্ষম করে৷ এগুলি ব্যবহারকারীর শংসাপত্রের অবস্থার সাথে বুদ্ধিমত্তার সাথে খাপ খায়৷ এটি সম্ভব হলে অবিলম্বে প্রমাণীকরণ অফার করে, অপ্রয়োজনীয় পুনঃনির্দেশ এড়ানো এবং প্রবাহকে স্ট্রিমলাইন করে।
- উন্নত শংসাপত্র ব্যবস্থাপনা : যখন একাধিক পাসওয়ার্ড ম্যানেজার একই অ্যাকাউন্টের জন্য শংসাপত্র অফার করে, তখন ব্রাউজার বুদ্ধিমত্তার সাথে সবচেয়ে উপযুক্ত বিকল্পটি নির্বাচন করে, ব্যবহারকারীদের জন্য শংসাপত্র ব্যবস্থাপনাকে সহজ করে।
- ব্যবহারকারীর বিভ্রান্তি হ্রাস: পরিচিত শংসাপত্রগুলি সরাসরি উপস্থাপন করার মাধ্যমে, বৈশিষ্ট্যটি ব্যবহারকারীর বিভ্রান্তি কমিয়ে দেয় যা প্রায়শই একাধিক সাইন-ইন বিকল্প বা মানক ফর্মের সাথে যুক্ত থাকে।
- নির্বিঘ্ন ফলব্যাক: এটি অবিলম্বে প্রমাণপত্র ছাড়াই ব্যবহারকারীদের জন্য স্ট্যান্ডার্ড সাইন-ইন পৃষ্ঠাগুলিতে একটি বিরামহীন ফলব্যাক নিশ্চিত করে, যার অর্থ বর্তমান প্রবাহ থেকে তাদের অভিজ্ঞতা অপরিবর্তিত থাকে।
গোপনীয়তা এবং নিরাপত্তা
WebAuthn অবিলম্বে মধ্যস্থতা সাইটগুলিকে অবিলম্বে উপলব্ধ শংসাপত্রের উপস্থিতি সনাক্ত করতে সক্ষম করে তার আগে একটি ব্যবহারকারী স্পষ্টভাবে একটি সাইন-ইন প্রচেষ্টা অনুমোদন করে৷ ব্যবহারকারীর গোপনীয়তা রক্ষা করতে এবং সম্ভাব্য অপব্যবহার রোধ করতে, আমরা বেশ কিছু গুরুত্বপূর্ণ পদক্ষেপ বাস্তবায়ন করি:
- ব্যবহারকারীর অঙ্গভঙ্গির প্রয়োজনীয়তা: API কলের জন্য একটি ব্যবহারকারীর অঙ্গভঙ্গি প্রয়োজন (যেকোনো ক্ষণস্থায়ী ব্যবহারকারী সক্রিয়করণ)। এটি সাইটগুলির জন্য সাইলেন্ট প্রোবিং এবং ফিঙ্গারপ্রিন্টিংকে কঠিন করে তোলে৷
- ছদ্মবেশী এবং ব্যক্তিগত সেশন: ছদ্মবেশী বা ব্যক্তিগত সেশনে, যেকোনও তাৎক্ষণিক মধ্যস্থতার অনুরোধ
NotAllowedError
নিক্ষেপ করে। -
allowCredentials
তালিকার উপর বিধিনিষেধ:allowCredentials
তালিকা ব্যবহার করে অনুরোধNotAllowedError
নিক্ষেপ করে। এটি সাইটগুলিকে ব্যবহারকারীর ইন্টারঅ্যাকশন ইতিহাস অনুমান করা বা সেশন জুড়ে ব্যবহারকারীদের ট্র্যাক করা থেকে বাধা দেয়। - বাতিলকরণ: অবিলম্বে মধ্যস্থতা সহ একটি অনুরোধে
signal
প্যারামিটার সেট করা অবৈধ৷ এটি সাইটগুলিকে প্রোগ্রাম্যাটিকভাবে কোনো ব্রাউজার UI খারিজ করতে বাধা দেয়।
চেষ্টা করে দেখুন
আমরা আপনাকে WebAuthn অবিলম্বে মধ্যস্থতা নিয়ে পরীক্ষা করার জন্য উত্সাহিত করি।
ক্রোমে স্থিতি
এই বৈশিষ্ট্যটি ক্রোমিয়াম বিকাশ চক্রের মাধ্যমে অগ্রসর হচ্ছে:
- ডেস্কটপ: Chrome 136-এ ডেভ ট্রায়াল, Chrome 139 থেকে 141 পর্যন্ত একটি অরিজিন ট্রায়াল সহ।
- Android: Chrome 140-এ ডেভ ট্রায়াল।
স্থানীয় পরীক্ষার জন্য
স্থানীয়ভাবে WebAuthn তাৎক্ষণিক মধ্যস্থতা পরীক্ষা করতে:
- Chrome 139 ডাউনলোড করুন: আপনার ডেস্কটপে ক্রোমের সর্বশেষ সংস্করণটি পান এবং খুলুন।
- অবিলম্বে মধ্যস্থতা পতাকা সক্ষম করুন: ঠিকানা বারে
chrome://flags/#web-authentication-immediate-get
এ নেভিগেট করুন এবং "ওয়েব প্রমাণীকরণ অবিলম্বে পান" পতাকা সক্ষম করুন৷ - শংসাপত্র প্রস্তুত করুন: আপনার ব্যবহারযোগ্য পাসকি এবং পাসওয়ার্ড সংরক্ষণ করা আছে তা নিশ্চিত করুন:
- Google পাসওয়ার্ড ম্যানেজারে পাসওয়ার্ড সংরক্ষিত।
- Google পাসওয়ার্ড ম্যানেজারে সংরক্ষিত পাসকিগুলি (একটি Google অ্যাকাউন্টের সাথে Chrome সাইন ইন এবং সিঙ্ক করা প্রয়োজন), Windows Hello, বা iCloud কীচেন৷
সর্বজনীন পরীক্ষার জন্য (অরিজিন ট্রায়াল)
একটি সর্বজনীন পরিবেশে অরিজিন ট্রায়াল সহ WebAuthn অবিলম্বে মধ্যস্থতা পরীক্ষা করতে:
- সাইন আপ করুন: Chrome অরিজিন ট্রায়াল পৃষ্ঠাতে যান এবং "WebAuthn অবিলম্বে মধ্যস্থতা" ট্রায়ালের জন্য সাইন আপ করুন৷
- এইচটিটিপি হেডারে টোকেন যোগ করুন: আপনার সাইটের HTTP হেডারে প্রদত্ত অরিজিন ট্রায়াল টোকেন অন্তর্ভুক্ত করুন:
HTML Origin-Trial: [YOUR_TRIAL_TOKEN]
দ্রষ্টব্য: আপনি জাভাস্ক্রিপ্টের সাথে প্রোগ্রামেটিকভাবে আপনার টোকেন প্রদান করতে পারেন।
পরীক্ষার পরিস্থিতি
আমরা একটি রেফারেন্স বাস্তবায়ন প্রদান করি এবং আপনাকে বিভিন্ন পরিস্থিতিতে পরীক্ষা করার জন্য আপনার নিজস্ব প্রোটোটাইপ তৈরি করতে উত্সাহিত করি।
- রেফারেন্স ডেমো: আপনি
https://deephand.github.io/webauthn-immediate-demo/
এ রেফারেন্স বাস্তবায়ন চেষ্টা করতে পারেন।- একটি প্রোটোটাইপ প্রয়োগ করুন: আপনার সাইটে একটি প্রোটোটাইপ প্রয়োগ করার সময়, নিশ্চিত করুন যে আপনি মধ্যস্থতা সহ
navigator.credentials.get()
কল করেছেনmediation: 'immediate'
(উদাহরণস্বরূপ, একটি "সাইন ইন" বোতাম, বা কোনও ইন্টারঅ্যাকশন যাতে ব্যবহারকারীকে সাইন ইন করতে হয়)।
- একটি প্রোটোটাইপ প্রয়োগ করুন: আপনার সাইটে একটি প্রোটোটাইপ প্রয়োগ করার সময়, নিশ্চিত করুন যে আপনি মধ্যস্থতা সহ
- ফ্লো 1: পাসওয়ার্ড বা পাসকি ছাড়া সাইন ইন করুন: আপনার কাছে যদি সাইটের জন্য কোনো পাসকি বা পাসওয়ার্ড উপলব্ধ না থাকে, তাহলে "সাইন ইন" ক্লিক করলে সরাসরি আপনার স্ট্যান্ডার্ড সাইন-ইন পৃষ্ঠায় চলে যাবে, কোনো ব্রাউজার UI দেখা যাবে না।
- ফ্লো 2: অবিলম্বে-উপলব্ধ স্থানীয় পাসকি দিয়ে সাইন ইন করুন: সাইটের জন্য যদি আপনার কাছে একটি পাসকি সংরক্ষিত থাকে, তাহলে "সাইন ইন" ক্লিক করলে তাৎক্ষণিক মধ্যস্থতা UI ট্রিগার করা উচিত, নির্বাচনের জন্য পাসকি অফার করে৷
- ফ্লো 3: একটি স্থানীয় পাসকি বা পাসওয়ার্ড দিয়ে সাইন ইন করুন: যদি আপনার পাসকি এবং পাসওয়ার্ড উভয়ই সংরক্ষিত থাকে, তাহলে "পাসওয়ার্ড অনুরোধ করুন" বিকল্পটি সক্রিয় করুন (
password: true
)। "সাইন ইন" ক্লিক করলে তাৎক্ষণিক মধ্যস্থতা UI-তে পাসকি এবং পাসওয়ার্ড উভয় বিকল্পই অফার করা উচিত।