প্রকাশিত: ১২ নভেম্বর, ২০২৪, সর্বশেষ আপডেট: ২৯ নভেম্বর, ২০২৪
WebAuthn Signal API নির্ভরশীল পক্ষগুলিকে সংযুক্ত পাসকি প্রদানকারীদের কাছে বিদ্যমান শংসাপত্রগুলি সিগন্যাল করতে দেয়। এটি একটি সমর্থনকারী পাসকি প্রদানকারীকে তার স্টোরেজ থেকে ভুল বা প্রত্যাহার করা পাসকি আপডেট করতে বা অপসারণ করতে দেয় যাতে ব্যবহারকারীদের আর সেগুলি অফার করা না হয়।
সামঞ্জস্য
ক্রোম সকল ডেস্কটপ প্ল্যাটফর্ম এবং অ্যান্ড্রয়েডে সিগন্যাল এপিআই সমর্থন করে।
সাফারি সহায়ক কিন্তু এখনও বাস্তবায়িত হয়নি। ফায়ারফক্স এখনও তাদের মতামত প্রকাশ করেনি ।
গুগল পাসওয়ার্ড ম্যানেজার সিগন্যাল প্রতিফলিত করার জন্য পাসকি আপডেট করতে পারে। ডেস্কটপে ক্রোম এক্সটেনশন-ভিত্তিক পাসকি প্রদানকারীরা সিগন্যাল প্রতিফলিত করবে কিনা তা নির্ধারণ করে।
পটভূমি
যখন একটি পাসকি ( একটি আবিষ্কারযোগ্য শংসাপত্র ) তৈরি করা হয়, তখন ব্যবহারকারীর নাম এবং প্রদর্শন নামের মতো মেটাডেটা ব্যক্তিগত কী সহ পাসকি প্রদানকারীর কাছে (যেমন একটি পাসওয়ার্ড ম্যানেজার) সংরক্ষণ করা হয়, যখন পাবলিক কী শংসাপত্র নির্ভরকারী পক্ষের (RP) সার্ভারে সংরক্ষণ করা হয়। ব্যবহারকারীর নাম এবং প্রদর্শন নাম সংরক্ষণ করা ব্যবহারকারীদের সাইন-ইন করার জন্য প্রম্পট করার সময় কোন অফার করা পাসকি ব্যবহার করা হবে তা সনাক্ত করতে সহায়তা করে। এটি বিশেষভাবে কার্যকর যখন ব্যবহারকারীদের কাছে বিভিন্ন পাসকি প্রদানকারীর দুটির বেশি পাসকি থাকে।
তবে, এমন কিছু ক্ষেত্রে আছে যেখানে পাসকি প্রদানকারীর পাসকি তালিকা এবং সার্ভারের শংসাপত্র তালিকার মধ্যে অসঙ্গতি বিভ্রান্তির সৃষ্টি করতে পারে।
প্রথম ক্ষেত্রে যখন একজন ব্যবহারকারী সার্ভার থেকে একটি শংসাপত্র মুছে ফেলেন। এর ফলে পাসকি প্রদানকারীর পাসকিটি অক্ষত থাকে। পরের বার ব্যবহারকারী যখন একটি পাসকি দিয়ে সাইন ইন করার চেষ্টা করেন, তখনও পাসকি প্রদানকারী ব্যবহারকারীর কাছে সেই পাসকিটি উপস্থাপন করেন। তবে, সাইন ইন করার প্রচেষ্টা ব্যর্থ হবে কারণ সার্ভার মুছে ফেলা পাবলিক কীটি যাচাই করতে পারে না।
দ্বিতীয় ক্ষেত্রে, যখন একজন ব্যবহারকারী সার্ভারে তাদের ব্যবহারকারীর নাম বা প্রদর্শন নাম আপডেট করেন। পরের বার ব্যবহারকারী সাইন ইন করার চেষ্টা করলে, পাসকি প্রদানকারীর পাসকিটি সার্ভারে আপডেট হওয়া সত্ত্বেও পুরানো ব্যবহারকারীর নাম এবং প্রদর্শন নাম প্রদর্শন করতে থাকে। আদর্শভাবে, এগুলি সিঙ্ক্রোনাইজ করা হয়।
সিগন্যাল এপিআই
সিগন্যাল এপিআই হল একটি ওয়েবঅথন এপিআই যা পাসকি প্রদানকারীতে RPs সিগন্যাল পরিবর্তন করার অনুমতি দিয়ে এই অসঙ্গতিগুলি সমাধান করে। তিনটি পদ্ধতি রয়েছে:
-
PublicKeyCredential.signalUnknownCredential: একটি শংসাপত্রের অস্তিত্ব নেই এমন সংকেত -
PublicKeyCredential.signalAllAcceptedCredentials: সংরক্ষিত শংসাপত্রের একটি তালিকা সিগন্যাল করুন -
PublicKeyCredential.signalCurrentUserDetails: সিগন্যাল আপডেট করা ব্যবহারকারীর নাম এবং প্রদর্শন নাম
কোনও শংসাপত্রের অস্তিত্ব নেই এমন সংকেত দিন
const credential = await navigator.credentials.get({ ... });
const payload = credential.toJSON();
const result = await fetch('/login', { ... });
// Detect authentication failure due to lack of the credential
if (result.status === 404) {
// Feature detection
if (PublicKeyCredential.signalUnknownCredential) {
await PublicKeyCredential.signalUnknownCredential({
rpId: "example.com",
credentialId: "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA" // base64url encoded credential ID
});
} else {
// Encourage the user to delete the passkey from the password manager nevertheless.
...
}
}
PublicKeyCredential.signalUnknownCredential() কে একটি RP ID এবং একটি credential ID দিয়ে কল করে, RP পাসকি প্রদানকারীকে জানাতে পারে যে নির্দিষ্ট credentialটি সরানো হয়েছে অথবা বিদ্যমান নেই। পাসকি প্রদানকারী এই সিগন্যালটি কীভাবে পরিচালনা করবেন তা নির্ধারণ করে, তবে সংশ্লিষ্ট পাসকিটি সরানো উচিত যাতে ব্যবহারকারীরা এমন কোনও পাসকি দিয়ে সাইন ইন করার চেষ্টা না করে যার কোনও সংশ্লিষ্ট credential নেই।
এই APIটি তখনই ব্যবহার করা যেতে পারে যখন পাসকি-ভিত্তিক সাইন-ইন ব্যর্থ হয় কারণ একটি ক্রেডেনশিয়াল অনুপস্থিত থাকে । এইভাবে, RP ব্যবহারকারীদের এমন একটি পাসকি দিয়ে সাইন ইন করার চেষ্টা করা থেকে বিরত রাখতে পারে যার কোনও সংযুক্ত ক্রেডেনশিয়াল নেই। signalAllAcceptedCredentials বিপরীতে, এই পদ্ধতিতে আপনাকে ক্রেডেনশিয়াল আইডির সম্পূর্ণ তালিকা পাস করার প্রয়োজন হয় না, তাই যখনই ব্যবহারকারী প্রমাণীকরণ না করা হয় তখনই এটি ব্যবহার করুন যাতে কোনও নির্দিষ্ট ব্যবহারকারীর পাসকির সংখ্যা প্রকাশ না হয়।

সংরক্ষিত শংসাপত্রের একটি তালিকা সিগন্যাল করুন
// After a user deletes a passkey or a user is signed in.
// Feature detection
if (PublicKeyCredential.signalAllAcceptedCredentials) {
await PublicKeyCredential.signalAllAcceptedCredentials({
rpId: "example.com",
userId: "M2YPl-KGnA8", // base64url encoded user ID
allAcceptedCredentialIds: [ // A list of base64url encoded credential IDs
"vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA",
...
]
});
}
ব্যবহারকারী সাইন ইন করার পরে অথবা অ্যাকাউন্ট সেটিংস পরিচালনা করার পরে PublicKeyCredential.signalAllAcceptedCredentials() ব্যবহার করুন। আপনি সেই ব্যবহারকারীর জন্য সমস্ত বৈধ ক্রেডেনশিয়াল আইডির একটি তালিকা প্রদান করেন। পাসকি প্রদানকারী এই তালিকাটিকে সেই নির্ভরশীল পক্ষের জন্য তার স্থানীয় স্টোরেজের সাথে তুলনা করে। পাসকি প্রদানকারী তার স্টোরেজে পাওয়া যেকোনো পাসকিকে "লুকানো" হিসেবে চিহ্নিত করে যা allAcceptedCredentialIds তালিকায় অন্তর্ভুক্ত নয়। সিস্টেমটি আর সাইন-ইন বা অটোফিলের জন্য এই লুকানো পাসকিগুলি অফার করে না, তবে সেগুলি অবিলম্বে স্থায়ীভাবে মুছে ফেলা হয় না, যা প্রয়োজনে পুনরুদ্ধারের অনুমতি দেয়। বিপরীতভাবে, পাসকি প্রদানকারী allAcceptedCredentialIds এ উপস্থিত পাসকিগুলি পুনরুদ্ধার করে যা "লুকানো" হিসাবে চিহ্নিত। এটি আপনার ওয়েবসাইটকে ভুল করে লুকানো পাসকিগুলি পুনরুদ্ধার করতে দেয়।
যখন কোনও ব্যবহারকারী RP এবং প্রতিটি সাইন-ইন- এ একটি পাসকি মুছে ফেলেন তখন এই APIটি ব্যবহার করুন, যাতে পাসকি প্রদানকারী পাসকিগুলির একটি সিঙ্ক্রোনাইজড তালিকা বজায় রাখতে পারে।
সিগন্যাল আপডেট করা ব্যবহারকারীর নাম এবং প্রদর্শন নাম
// After a user updated their username and/or display name
// or a user is signed in.
// Feature detection
if (PublicKeyCredential.signalCurrentUserDetails) {
await PublicKeyCredential.signalCurrentUserDetails({
rpId: "example.com",
userId: "M2YPl-KGnA8", // base64url encoded user ID
name: "a.new.email.address@example.com", // username
displayName: "J. Doe"
});
} else {
}
PublicKeyCredential.signalCurrentUserDetails() কে RP আইডি, একটি ব্যবহারকারী আইডি, একটি ব্যবহারকারীর নাম এবং প্রদর্শন নাম দিয়ে কল করে, RP পাসকি প্রদানকারীকে আপডেট করা ব্যবহারকারীর তথ্য সম্পর্কে অবহিত করতে পারে। পাসকি প্রদানকারী এই সংকেতটি কীভাবে পরিচালনা করবেন তা নির্ধারণ করে, তবে এটি ব্যবহারকারীর মালিকানাধীন পাসকিগুলিকে নতুন ব্যবহারকারীর তথ্য দিয়ে আপডেট করা উচিত।
ব্যবহারকারীর ব্যবহারকারীর নাম বা প্রদর্শন নাম আপডেট করা হলে এবং প্রতিটি সাইন ইনে এই API ব্যবহার করা যেতে পারে, যাতে পাসকি প্রদানকারী সার্ভারের সাথে সিঙ্ক্রোনাইজ করা এই তথ্য বজায় রাখতে পারে।

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