প্রকাশিত: নভেম্বর 12, 2024
WebAuthn সিগন্যাল API নির্ভরকারী পক্ষগুলিকে সংযুক্ত পাসকি প্রদানকারীদের বিদ্যমান শংসাপত্রগুলিকে সংকেত দেওয়ার অনুমতি দেয়৷ এটির সাহায্যে, একটি সমর্থনকারী পাসকি প্রদানকারী তার স্টোরেজ থেকে ভুল বা প্রত্যাহার করা পাসকিগুলিকে আপডেট বা অপসারণ করতে পারে যাতে সেগুলি ব্যবহারকারীদের আর অফার করা না হয়।
সামঞ্জস্য
ডেস্কটপে ক্রোম Chrome 132 থেকে শুরু করে সিগন্যাল API সমর্থন করে। Google পাসওয়ার্ড ম্যানেজার সিগন্যাল প্রতিফলিত করে পাসকি আপডেট করতে পারে। Chrome এক্সটেনশন ভিত্তিক পাসকি প্রদানকারীদের জন্য, তারা সংকেত প্রতিফলিত করবে কি না তা তাদের উপর নির্ভর করে।
Android সমর্থনে Chrome পরে আসছে।
সাফারি সহায়ক কিন্তু এখনো বাস্তবায়িত হয়নি। ফায়ারফক্স এখনও তাদের মতামত শেয়ার করেনি ।
পটভূমি
যখন একটি পাসকি ( একটি আবিষ্কারযোগ্য শংসাপত্র ) তৈরি করা হয়, মেটাডেটা যেমন একটি ব্যবহারকারীর নাম এবং একটি প্রদর্শন নাম পাসকি প্রদানকারীর কাছে (যেমন একটি পাসওয়ার্ড ম্যানেজার) ব্যক্তিগত কী সহ সংরক্ষণ করা হয়, যখন পাবলিক কী শংসাপত্রটি নির্ভরকারী পক্ষের কাছে সংরক্ষণ করা হয় (RP এর) সার্ভার। ব্যবহারকারীর নাম এবং প্রদর্শনের নাম সংরক্ষণ করা ব্যবহারকারীকে প্রম্পট করার সময় প্রস্তাবিত পাসকিগুলির মধ্যে কোনটি দিয়ে সাইন ইন করতে হবে তা সনাক্ত করতে সহায়তা করে৷ এটি বিশেষভাবে উপযোগী হয় যখন তাদের কাছে বিভিন্ন পাসকি প্রদানকারীর থেকে দুটির বেশি পাসকি থাকে।
যাইহোক, এমন কয়েকটি ক্ষেত্রে রয়েছে যেখানে পাসকি প্রদানকারীর পাসকি তালিকা এবং সার্ভারের শংসাপত্রের তালিকার মধ্যে অসঙ্গতি বিভ্রান্তির কারণ হতে পারে।
প্রথম ক্ষেত্রে যখন একজন ব্যবহারকারী সার্ভারে একটি শংসাপত্র মুছে ফেলে পাসকি প্রদানকারীর পাসকিটিকে স্পর্শ না করে। পরের বার যখন ব্যবহারকারী একটি পাসকি দিয়ে সাইন ইন করার চেষ্টা করবে, সেই পাসকিটি এখনও পাসকি প্রদানকারী ব্যবহারকারীর কাছে উপস্থাপন করবে। যাইহোক, সাইন ইন করার প্রচেষ্টা ব্যর্থ হবে কারণ সার্ভারটি মুছে ফেলা সর্বজনীন কী দিয়ে যাচাই করতে সক্ষম হবে না।
দ্বিতীয় ক্ষেত্রে যখন একজন ব্যবহারকারী তাদের ব্যবহারকারীর নাম বা সার্ভারে প্রদর্শনের নাম আপডেট করে। পরের বার ব্যবহারকারী সাইন ইন করার চেষ্টা করলে, পাসকি প্রদানকারীর পাসকি সার্ভারে আপডেট হওয়া সত্ত্বেও পুরানো ব্যবহারকারীর নাম এবং প্রদর্শন নাম প্রদর্শন করতে থাকে। আদর্শভাবে তাদের সিঙ্ক হওয়া উচিত।
সিগন্যাল API
সিগন্যাল API হল একটি WebAuthn API যা 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 আইডি এবং একটি শংসাপত্র আইডি সহ কল করে, RP পাসকি প্রদানকারীকে জানাতে পারে যে নির্দিষ্ট শংসাপত্রটি সরানো হয়েছে বা বিদ্যমান নেই৷ এই সংকেতটি কীভাবে মোকাবেলা করবেন তা পাসকি প্রদানকারীর উপর নির্ভর করে, তবে সংশ্লিষ্ট পাসকিটি সরানো হবে বলে আশা করা হচ্ছে যাতে সংশ্লিষ্ট শংসাপত্রটি বিদ্যমান না থাকায় ব্যবহারকারী পাসকি দিয়ে সাইন ইন করতে না পারে।
একটি পাসকি ভিত্তিক সাইন-ইন একটি শংসাপত্রের অনুপস্থিতির কারণে ব্যর্থ হলে এই 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()
কে একটি RP আইডি, একটি ব্যবহারকারী আইডি এবং সঞ্চিত শংসাপত্রের শংসাপত্রের আইডির একটি তালিকা সহ কল করে, RP তার স্টোরেজে থাকা অবশিষ্ট শংসাপত্রগুলির পাসকি প্রদানকারীকে জানাতে পারে৷ এই সিগন্যালের সাথে কীভাবে মোকাবিলা করা যায় তা পাসকি প্রদানকারীর উপর নির্ভর করে, কিন্তু এই তালিকার সাথে মেলে না এমন পাসকিগুলি সরানো হবে বলে আশা করা হচ্ছে যাতে ব্যবহারকারী সাইন ইন করার সময় পাসকিগুলি দেখতে না পায় যার জন্য সংশ্লিষ্ট শংসাপত্রটি বিদ্যমান নেই৷
এই APIটি চালু করা উচিত যখন একজন ব্যবহারকারী RP এ এবং প্রতিটি সাইন-ইন করার সময় একটি পাসকি মুছে দেয় , যাতে পাসকি প্রদানকারী পাসকিগুলির একটি সিঙ্ক্রোনাইজ করা তালিকা রাখতে পারে৷
সংকেত আপডেট করা ব্যবহারকারীর নাম এবং প্রদর্শন নাম
// 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 ID, একটি ব্যবহারকারী আইডি, একটি ব্যবহারকারীর নাম এবং একটি প্রদর্শন নাম সহ কল করে, RP আপডেট করা ব্যবহারকারীর তথ্য পাসকি প্রদানকারীকে জানাতে পারে। এই সিগন্যালটি কীভাবে মোকাবেলা করবেন তা পাসকি প্রদানকারীর উপর নির্ভর করে, তবে ব্যবহারকারীর মালিকানাধীন পাসকিগুলি নতুন ব্যবহারকারীর তথ্যের সাথে আপডেট করা হবে বলে আশা করা হচ্ছে।
যখন ব্যবহারকারীর ব্যবহারকারীর নাম বা প্রদর্শনের নাম আপডেট করা হয় এবং প্রতিটি সাইন ইনে তখন এই APIটি চালু করা যেতে পারে, যাতে পাসকি প্রদানকারী এই তথ্যটি সার্ভারের সাথে সিঙ্ক্রোনাইজ রাখতে পারে৷
সারাংশ
সিগন্যাল এপিআই আপনাকে অপ্রত্যাশিত সাইন-ইন ব্যর্থতার সম্ভাবনা দূর করে একটি ভাল পাসকি অভিজ্ঞতা তৈরি করতে সহায়তা করে। সিগন্যাল এপিআই-এর সাহায্যে, নির্ভরকারী দলগুলি বিদ্যমান শংসাপত্রের তালিকা এবং তাদের মেটাডেটা সংকেত দিতে পারে, যাতে তারা পাসকি প্রদানকারীর কাছে সিঙ্কে পাসকি রাখতে পারে।
পাসকি সম্পর্কে আরও জানতে, পাসওয়ার্ডবিহীন লগইন থেকে পাসকি দিয়ে শুরু করুন।