এই পৃষ্ঠায় একটি রিস্টোর কী তৈরি, সাইন ইন এবং ডিলিট করার পদ্ধতি বর্ণনা করা হয়েছে।
সংস্করণ সামঞ্জস্যতা
ক্রেডেনশিয়াল ম্যানেজারের 'রিস্টোর ক্রেডেনশিয়ালস' অপশনটি অ্যান্ড্রয়েড ৯ ও তার পরবর্তী সংস্করণ, গুগল প্লে সার্ভিসেস (জিএমএস) কোর ভার্সন ২৪২২০০০০ বা তার উচ্চতর সংস্করণ এবং androidx.credentials লাইব্রেরির ভার্সন ১.৫.০ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে কাজ করে।
পূর্বশর্ত
পাসকি -এর সার্ভারের অনুরূপ একটি রিলায়িং পার্টি সার্ভার সেট আপ করুন। যদি আপনার কাছে ইতিমধ্যেই পাসকি দিয়ে অথেনটিকেশন পরিচালনার জন্য একটি সার্ভার সেট আপ করা থাকে, তাহলে রিস্টোর কি-এর জন্যও একই সার্ভার-সাইড ইমপ্লিমেন্টেশন ব্যবহার করুন।
নির্ভরশীলতা
আপনার অ্যাপ মডিউলের build.gradle ফাইলে নিম্নলিখিত ডিপেন্ডেন্সিগুলো যোগ করুন:
কোটলিন
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha03") implementation("androidx.credentials:credentials-play-services-auth:1.7.0-alpha03") }
গ্রোভি
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha03" implementation "androidx.credentials:credentials-play-services-auth:1.7.0-alpha03" }
androidx.credentials লাইব্রেরির সংস্করণ 1.5.0 এবং তার পরবর্তী সংস্করণগুলোতে Restore Credentials সুবিধাটি পাওয়া যায়। তবে, যেখানে সম্ভব, ডিপেন্ডেন্সিগুলোর সর্বশেষ স্থিতিশীল সংস্করণ ব্যবহার করার পরামর্শ দেওয়া হয়।
সংক্ষিপ্ত বিবরণ
- রিস্টোর কী তৈরি করুন : একটি রিস্টোর কী তৈরি করতে, নিম্নলিখিত ধাপগুলি সম্পন্ন করুন:
- ক্রেডেনশিয়াল ম্যানেজার ইনস্ট্যানশিয়েট করুন : একটি
CredentialManagerঅবজেক্ট তৈরি করুন। - অ্যাপ সার্ভার থেকে ক্রেডেনশিয়াল তৈরির বিকল্পগুলি নিন : আপনার অ্যাপ সার্ভার থেকে রিস্টোর কী তৈরি করার জন্য প্রয়োজনীয় বিবরণ ক্লায়েন্ট অ্যাপে পাঠান।
- রিস্টোর কী তৈরি করুন : ব্যবহারকারী যদি আপনার অ্যাপে সাইন ইন করে থাকেন, তাহলে তার অ্যাকাউন্টের জন্য একটি রিস্টোর কী তৈরি করুন।
- ক্রেডেনশিয়াল তৈরির প্রতিক্রিয়া পরিচালনা করুন : প্রক্রিয়াকরণের জন্য আপনার ক্লায়েন্ট অ্যাপ থেকে আপনার অ্যাপ সার্ভারে ক্রেডেনশিয়ালগুলো পাঠান এবং যেকোনো ব্যতিক্রম পরিচালনা করুন।
- ক্রেডেনশিয়াল ম্যানেজার ইনস্ট্যানশিয়েট করুন : একটি
- রিস্টোর কী দিয়ে সাইন ইন করুন : রিস্টোর কী দিয়ে সাইন ইন করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:
- অ্যাপ সার্ভার থেকে ক্রেডেনশিয়াল পুনরুদ্ধারের বিকল্পগুলি নিন : আপনার অ্যাপ সার্ভার থেকে রিস্টোর কী পুনরুদ্ধার করার জন্য প্রয়োজনীয় বিবরণ ক্লায়েন্ট অ্যাপে পাঠান।
- রিস্টোর কী সংগ্রহ করুন : ব্যবহারকারী যখন একটি নতুন ডিভাইস সেট আপ করেন, তখন ক্রেডেনশিয়াল ম্যানেজার থেকে রিস্টোর কী-এর জন্য অনুরোধ করুন। এর ফলে ব্যবহারকারী কোনো অতিরিক্ত তথ্য ছাড়াই সাইন ইন করতে পারেন।
- ক্রেডেনশিয়াল পুনরুদ্ধারের প্রতিক্রিয়াটি পরিচালনা করুন : ব্যবহারকারীকে সাইন ইন করানোর জন্য ক্লায়েন্ট অ্যাপ থেকে অ্যাপ সার্ভারে রিস্টোর কী পাঠান।
- একটি রিস্টোর কী মুছে ফেলুন ।
একটি রিস্টোর কী তৈরি করুন
ব্যবহারকারীর সাইন ইন করার প্রতিটি ক্ষেত্রে আপনার অ্যাপের এমন ব্যবস্থা থাকা উচিত, যাতে সক্রিয় ব্যবহারকারীদের জন্য একটি রিস্টোর কী তৈরি করা হয়। নিম্নলিখিত পরিস্থিতিগুলোতে রিস্টোর কী তৈরি করুন:
- যদি ব্যবহারকারী সাইন ইন করে থাকেন এবং আগে থেকে কোনো রিস্টোর কী তৈরি করা না থাকে (যেমন মূল
ActivityonCreateমেথডে)। - যখন ব্যবহারকারী সাইন ইন করছেন বা নতুন অ্যাকাউন্ট নিবন্ধনের প্রক্রিয়াটি সম্পন্ন করছেন।
পারফরম্যান্স অপ্টিমাইজ করতে এবং প্রতিটি লগইনে রিস্টোর ক্রেডেনশিয়াল তৈরি বা চেক করার অতিরিক্ত কাজ এড়াতে, লোকাল স্টোরেজে একটি boolean ফ্ল্যাগ বা ক্রেডেনশিয়াল তৈরির টাইমস্ট্যাম্প (যেমন has_synced_restore_credential ) সেট করুন, যা দিয়ে ট্র্যাক করা যাবে যে কী-টি ইতিমধ্যে তৈরি হয়েছে কিনা।
ক্রেডেনশিয়াল ম্যানেজার ইনস্ট্যানশিয়েট করুন
আপনার অ্যাপের অ্যাক্টিভিটি কনটেক্সট ব্যবহার করে একটি CredentialManager অবজেক্ট ইনস্ট্যানশিয়েট করুন।
// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)
আপনার অ্যাপ সার্ভার থেকে ক্রেডেনশিয়াল তৈরির বিকল্পগুলি পান
আপনার অ্যাপ সার্ভারে একটি FIDO-সম্মত লাইব্রেরি ব্যবহার করে আপনার ক্লায়েন্ট অ্যাপে রিস্টোর ক্রেডেনশিয়াল তৈরি করার জন্য প্রয়োজনীয় তথ্য, যেমন ব্যবহারকারী, অ্যাপ এবং অতিরিক্ত কনফিগারেশন প্রোপার্টি সম্পর্কিত তথ্য পাঠান। সার্ভার-সাইড বাস্তবায়ন সম্পর্কে আরও তথ্যের জন্য, সার্ভার-সাইড নির্দেশিকা দেখুন।
রিস্টোর কী তৈরি করুন
সার্ভার থেকে পাঠানো পাবলিক কী তৈরির অপশনগুলো পার্স করার পর, এই অপশনগুলোকে একটি CreateRestoreCredentialRequest অবজেক্টে র্যাপ করে এবং CredentialManager অবজেক্টসহ createCredential() মেথডটি কল করে একটি রিস্টোর কী তৈরি করুন।
// createRestoreRequest contains the details sent by the server
val response = credentialManager.createCredential(context, createRestoreRequest)
কোড সম্পর্কে মূল বিষয়গুলো
CreateRestoreCredentialRequestঅবজেক্টটিতে নিম্নলিখিত ফিল্ডগুলি রয়েছে:-
requestJson:PublicKeyCredentialCreationOptionsJSONএর জন্য ওয়েব অথেনটিকেশন এপিআই ফরম্যাটে অ্যাপ সার্ভার দ্বারা প্রেরিত ক্রেডেনশিয়াল তৈরির বিকল্পসমূহ। isCloudBackupEnabled: রিস্টোর কী ক্লাউডে ব্যাকআপ করা হবে কিনা তা নির্ধারণ করার জন্যBooleanফিল্ড। ডিফল্টরূপে, এই ফ্ল্যাগটির মানtrueথাকে। এই ফিল্ডটির মানগুলো হলো:-
true: ( প্রস্তাবিত ) যদি ব্যবহারকারীর গুগল ব্যাকআপ এবং স্ক্রিন লকের মতো এন্ড-টু-এন্ড এনক্রিপশন চালু থাকে, তাহলে এই মানটি রিস্টোর কী-গুলোর ক্লাউডে ব্যাকআপ নেওয়া সক্ষম করে। -
false: এই মানটি কী-টি ক্লাউডে নয়, বরং স্থানীয়ভাবে সংরক্ষণ করে। ব্যবহারকারী যদি ক্লাউড থেকে রিস্টোর করার বিকল্পটি বেছে নেন, তবে নতুন ডিভাইসে কী-টি উপলব্ধ থাকে না।
-
-
ক্রেডেনশিয়াল তৈরির প্রতিক্রিয়া পরিচালনা করুন
ক্রেডেনশিয়াল ম্যানেজার এপিআই CreateRestoreCredentialResponse টাইপের একটি রেসপন্স রিটার্ন করে। এই রেসপন্সটিতে পাবলিক কী ক্রেডেনশিয়াল রেজিস্ট্রেশন রেসপন্সটি JSON ফরম্যাটে থাকে।
আপনার অ্যাপ থেকে রিলায়িং পার্টি সার্ভারে পাবলিক কী পাঠান। এই পাবলিক কী-টি পাসকী তৈরি করার সময় তৈরি হওয়া পাবলিক কী-এর মতোই। সার্ভারে যে কোডটি পাসকী তৈরির কাজ করে, সেটিই রিস্টোর কী তৈরির কাজও করতে পারে। সার্ভার-সাইড ইমপ্লিমেন্টেশন সম্পর্কে আরও তথ্যের জন্য, পাসকী সংক্রান্ত নির্দেশিকা দেখুন।
রিস্টোর কী তৈরির প্রক্রিয়া চলাকালীন, এই ব্যতিক্রমগুলি পরিচালনা করুন:
-
CreateRestoreCredentialDomException: এই ব্যতিক্রমটি ঘটে যদিrequestJsonঅবৈধ হয় এবংPublicKeyCredentialCreationOptionsJSONএর জন্য WebAuthn ফর্ম্যাট অনুসরণ না করে। -
E2eeUnavailableException: এই ব্যতিক্রমটি ঘটে যদিisCloudBackupEnabledtrueহয়, কিন্তু ব্যবহারকারীর ডিভাইসে ডেটা ব্যাকআপ বা স্ক্রিন লকের মতো এন্ড-টু-এন্ড এনক্রিপশন না থাকে।
সকল ক্ষেত্রে রিস্টোর ক্রেডেনশিয়াল তৈরি হওয়া নিশ্চিত করতে, আপনাকে অবশ্যইisCloudBackupEnabledtrueসেট করেcreateCredentialকল করার মাধ্যমেE2eeUnavailableExceptionটি স্পষ্টভাবে হ্যান্ডেল করতে হবে। যদিE2eeUnavailableExceptionথ্রো হয়, তবে তা ক্যাচ করুন এবংisCloudBackupEnabledfalseসেট করে আবারcreateCredentialকল করুন। -
IllegalArgumentException: এই ব্যতিক্রমটি ঘটে যদিcreateRestoreRequestখালি থাকে বা বৈধ JSON না হয়, অথবা যদি এতে WebAuthn স্পেসিফিকেশন অনুযায়ী একটি বৈধuser.idনা থাকে।
একটি রিস্টোর কী দিয়ে সাইন ইন করুন
ডিভাইস সেটআপ প্রক্রিয়া চলাকালীন ব্যবহারকারীকে নীরবে সাইন ইন করতে ‘Restore Credentials’ ব্যবহার করুন।
অ্যাপ সার্ভার থেকে পরিচয়পত্র পুনরুদ্ধারের বিকল্পগুলি পান
সার্ভার থেকে রিস্টোর কী পেতে ক্লায়েন্ট অ্যাপে প্রয়োজনীয় অপশনগুলো পাঠান। এই ধাপের জন্য অনুরূপ পাসকী নির্দেশনার জন্য, ‘পাসকী দিয়ে সাইন ইন করুন ’ দেখুন। সার্ভার-সাইড বাস্তবায়ন সম্পর্কে আরও তথ্যের জন্য, ‘ সার্ভার-সাইড অথেন্টিকেশন গাইড’ দেখুন।
রিস্টোর কীটি নিন
নতুন ডিভাইসে রিস্টোর কী পেতে, CredentialManager অবজেক্টের getCredential() মেথডটি কল করুন।
নিম্নলিখিত উভয় পরিস্থিতিতেই রিস্টোর কী সংগ্রহ করার পরামর্শ দেওয়া হচ্ছে:
- ডিভাইসে অ্যাপটি প্রথমবার চালু করার সময়। এই ক্ষেত্রে ক্রেডেনশিয়াল পুনরুদ্ধার, অ্যাপ ডেটা পুনরুদ্ধারের উপর নির্ভরশীল নয়।
- যদি অ্যাপ ডেটা ব্যাকআপ এবং রিস্টোর চালু থাকে, তাহলে অ্যাপ ডেটা রিস্টোর হওয়ার সাথে সাথেই রিস্টোর কী-টি সংগ্রহ করুন। আপনার অ্যাপের ব্যাকআপ কনফিগার করতে
BackupAgentব্যবহার করুন এবং নিশ্চিত করুন যে আপনিonRestoreFinishedকলব্যাকের মধ্যেgetCredentialফাংশনালিটিটি সম্পূর্ণ করেছেন।onRestoreমেথডটি ব্যবহার করবেন না, কারণ এটি শুধুমাত্র কী-ভ্যালু ব্যাকআপের জন্য কল করা হয়, যেখানেonRestoreFinishedযেকোনো ধরনের ব্যাকআপ রিস্টোরের জন্য নির্ভরযোগ্যভাবে কল করা হয়। এটি ব্যবহারকারীদের নতুন ডিভাইস প্রথমবার খোলার সময় সম্ভাব্য বিলম্ব এড়াতে সাহায্য করে এবং ব্যবহারকারীদের আপনার অ্যাপ খোলার জন্য অপেক্ষা না করিয়েই অ্যাপটির সাথে ইন্টারঅ্যাক্ট করার সুযোগ দেয়। উদাহরণস্বরূপ, এটি আপনার অ্যাপকে ব্যবহারকারীর নতুন ডিভাইসে প্রথমবার অ্যাপটি খোলার আগেই নোটিফিকেশন পাঠাতে সাহায্য করে, যা বিশেষ করে মেসেজিং বা কমিউনিকেশন অ্যাপের জন্য প্রাসঙ্গিক।
// Fetch the options required to get the restore key
val authenticationJson = fetchAuthenticationJson()
// Create the GetRestoreCredentialRequest object
val options = GetRestoreCredentialOption(authenticationJson)
val getRequest = GetCredentialRequest(listOf(options))
val response = credentialManager.getCredential(context, getRequest)
// Type-check and extract the restore credential
val credential = response.credential as RestoreCredential
ক্রেডেনশিয়াল ম্যানেজার এপিআইগুলো GetCredentialResponse টাইপের একটি রেসপন্স রিটার্ন করে। এই রেসপন্সে থাকা ক্রেডেনশিয়ালটি সুস্পষ্টভাবে RestoreCredential টাইপের হয়, যা পাবলিক কী ধারণ করে।
সাইন-ইন প্রতিক্রিয়া পরিচালনা করুন
অ্যাপ থেকে রিলায়িং পার্টি সার্ভারে পাবলিক কী পাঠান, যা পরবর্তীতে ব্যবহারকারীকে সাইন ইন করতে ব্যবহার করা যেতে পারে। সার্ভার সাইডে, এই কাজটি পাসকী ব্যবহার করে সাইন ইন করার মতোই। সার্ভারে যে কোডটি পাসকী দিয়ে সাইন-ইন পরিচালনা করে, সেটিই রিস্টোর কী দিয়ে সাইন-ইনও পরিচালনা করতে পারে। পাসকীর সার্ভার-সাইড ইমপ্লিমেন্টেশন সম্পর্কে আরও তথ্যের জন্য, “পাসকী দিয়ে সাইন ইন করুন” দেখুন।
রিস্টোর কী মুছে ফেলুন
ক্রেডেনশিয়াল ম্যানেজার স্টেটলেস এবং ব্যবহারকারীর কার্যকলাপ সম্পর্কে অবগত নয়, তাই এটি ব্যবহারের পরে স্বয়ংক্রিয়ভাবে রিস্টোর কী মুছে ফেলে না। একটি রিস্টোর কী মুছে ফেলার জন্য, clearCredentialState() মেথডটি কল করুন। নিরাপত্তার জন্য, যখনই কোনো ব্যবহারকারী সাইন আউট করেন, তখনই কী-টি মুছে ফেলুন। এটি নিশ্চিত করে যে পরের বার যখন ব্যবহারকারী একই ডিভাইসে অ্যাপটি খুলবেন, তখন তিনি সাইন আউট অবস্থায় থাকবেন এবং তাকে আবার সাইন ইন করার জন্য অনুরোধ করা হবে।
কোনো অ্যাপ আনইনস্টল করাকে সেই ডিভাইস থেকে সংশ্লিষ্ট রিস্টোর কী-টি মুছে ফেলার অভিপ্রায় হিসেবে গণ্য করা হয়, যা সাইন আউট করার সময় ব্যবহারকারীর অভিপ্রায়ের অনুরূপ।
শুধুমাত্র নিম্নলিখিত পরিস্থিতিতে রিস্টোর কীগুলি মুছে ফেলা হয়:
- সিস্টেম-স্তরের পদক্ষেপ : ব্যবহারকারীরা অ্যাপটি আনইনস্টল করেন অথবা এর ডেটা মুছে ফেলেন।
- অ্যাপ-স্তরের কল : আপনার অ্যাপের কোডে ব্যবহারকারী সাইন আউট পরিচালনা করার সময়
clearCredentialState()কল করে প্রোগ্রাম্যাটিকভাবে কী-টি মুছে ফেলুন।
যখন ব্যবহারকারী আপনার অ্যাপ থেকে সাইন আউট করেন, তখন CredentialManager অবজেক্টের clearCredentialState() মেথডটি কল করুন।
// Create a ClearCredentialStateRequest object
val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
// When the user logs out, delete the restore key
val response = credentialManager.clearCredentialState(clearRequest)