ক্রেডেনশিয়াল ম্যানেজারের মাধ্যমে ক্রেডেনশিয়াল রিস্টোর করার সুবিধা প্রয়োগ করা

এই পৃষ্ঠায়, কীভাবে রিস্টোর 'কী' তৈরি করবেন, সেটি ব্যবহার করে সাইন-ইন করবেন এবং মুছে দেবেন তা বর্ণনা করা হয়েছে।

ভার্সন মানানসই কিনা

Credential Manager-এর ক্রেডেনশিয়াল রিস্টোর করার ফিচার Android 9 (API লেভেল 28) ও তার পরবর্তী যেকোনও ভার্সন, Google Play পরিষেবা (GMS) কোর ভার্সন 24220000 বা তার পরবর্তী যেকোনও ভার্সন এবং androidx.credentials লাইব্রেরির 1.5.0 বা তার পরবর্তী যেকোনও ভার্সনে কাজ করে।

পূর্বশর্ত

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

ডিপেন্ডেন্সি

আপনার অ্যাপ মডিউলের 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. রিস্টোর কী তৈরি করা: রিস্টোর কী তৈরি করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:
    1. ক্রেডেনশিয়াল ম্যানেজার ইনস্ট্যান্টিয়েট করা: একটি CredentialManager অবজেক্ট তৈরি করুন।
    2. অ্যাপ সার্ভার থেকে ক্রেডেনশিয়াল তৈরি করার বিকল্প পান: আপনার অ্যাপ সার্ভার থেকে রিস্টোর কী তৈরি করার জন্য প্রয়োজনীয় বিবরণ ক্লায়েন্ট অ্যাপে পাঠান।
    3. রিস্টোর 'কী' তৈরি করা: ব্যবহারকারী আপনার অ্যাপে সাইন-ইন করে থাকলে, ব্যবহারকারীর অ্যাকাউন্টের জন্য রিস্টোর 'কী' তৈরি করুন।
    4. ক্রেডেনশিয়াল তৈরি করার রেসপন্স ম্যানেজ করা: প্রসেস করার জন্য আপনার ক্লায়েন্ট অ্যাপ থেকে আপনার অ্যাপ সার্ভারে ক্রেডেনশিয়াল পাঠান এবং যেকোনও ব্যতিক্রম ম্যানেজ করুন।
  2. রিস্টোর 'কী' ব্যবহার করে সাইন-ইন করা: রিস্টোর 'কী' ব্যবহার করে সাইন-ইন করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:
    1. অ্যাপ সার্ভার থেকে ক্রেডেনশিয়াল ফিরিয়ে আনার বিকল্প পান: আপনার অ্যাপ সার্ভার থেকে রিস্টোর কী ফিরিয়ে আনার জন্য প্রয়োজনীয় বিবরণ ক্লায়েন্ট অ্যাপে পাঠান।
    2. রিস্টোর কী পাওয়া: ব্যবহারকারী নতুন ডিভাইস সেট-আপ করলে, ক্রেডেনশিয়াল ম্যানেজার থেকে রিস্টোর কী-এর অনুরোধ করুন। এর ফলে ব্যবহারকারী অতিরিক্ত ইনপুট ছাড়াই সাইন-ইন করতে পারেন।
    3. ক্রেডেনশিয়াল ফিরিয়ে আনার রেসপন্স ম্যানেজ করা: ব্যবহারকারীকে সাইন-ইন করাতে ক্লায়েন্ট অ্যাপ থেকে অ্যাপ সার্ভারে রিস্টোর কী পাঠান।
  3. রিস্টোর কী মুছে দিন।

রিস্টোর কী তৈরি করুন

অ্যাক্টিভ ব্যবহারকারীদের কাছে যাতে রিস্টোর কী থাকে তা নিশ্চিত করতে, আপনার অ্যাপে ব্যবহারকারীর সাইন-ইন করার সবকটি কেস কভার করতে হবে। নিম্নলিখিত পরিস্থিতিতে রিস্টোর 'কী' তৈরি করুন:

  • ব্যবহারকারী সাইন-ইন করে থাকলে এবং আগে থেকে কোনও রিস্টোর 'কী' তৈরি করা না থাকলে (যেমন, প্রধান Activity-এর জন্য onCreate পদ্ধতি)।
  • ব্যবহারকারী যখন সাইন-ইন করছেন বা নতুন অ্যাকাউন্ট রেজিস্ট্রেশন ফ্লো সম্পূর্ণ করছেন।

পারফর্ম্যান্স অপ্টিমাইজ করতে এবং প্রতিটি লগ-ইনে ক্রেডেনশিয়াল রিস্টোর করার জন্য তৈরি বা চেক করার ওভারহেড এড়াতে, 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-এর জন্য ওয়েব যাচাইকরণ API ফর্ম্যাটে অ্যাপ সার্ভারের মাধ্যমে পাঠানো ক্রেডেনশিয়াল তৈরি করার বিকল্প।
    • isCloudBackupEnabled: Boolean ফিল্ড, রিস্টোর কী ক্লাউডে ব্যাক-আপ নেওয়া উচিত কিনা তা নির্ধারণ করতে। ডিফল্ট হিসেবে, এই ফ্ল্যাগটি true। এই ফিল্ডে এইসব ভ্যালু আছে:

      • true: (সাজেস্ট করা হয়েছে) ব্যবহারকারীর Google ব্যাক-আপ এবং এন্ড-টু-এন্ড এনক্রিপশন, যেমন স্ক্রিন লক চালু থাকলে, এই ভ্যালু ক্লাউডে রিস্টোর কী-এর ব্যাক-আপ চালু করে।
      • false: এই ভ্যালু 'কী' স্থানীয়ভাবে সেভ করে, ক্লাউডে নয়। ব্যবহারকারী ক্লাউড থেকে রিস্টোর করার বিকল্প বেছে নিলে, নতুন ডিভাইসে কী উপলভ্য থাকে না।

ক্রেডেনশিয়াল তৈরি করার উত্তর ম্যানেজ করুন

Credential Manager API এই ধরনের উত্তর দেয় CreateRestoreCredentialResponse। এই উত্তরে JSON ফর্ম্যাটে সর্বজনীন কী ক্রেডেনশিয়াল রেজিস্ট্রেশন উত্তর থাকে।

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

রিস্টোর কী তৈরি করার প্রসেস চলাকালীন, এইসব ব্যতিক্রম ম্যানেজ করুন:

  • CreateRestoreCredentialDomException: এই ব্যতিক্রমটি ঘটে যদি requestJson অবৈধ হয় এবং PublicKeyCredentialCreationOptionsJSON-এর জন্য WebAuthn ফর্ম্যাট অনুসরণ না করে।
  • E2eeUnavailableException: এই ব্যতিক্রমটি ঘটে যদি isCloudBackupEnabled true হয়, কিন্তু ব্যবহারকারীর ডিভাইসে ডেটা ব্যাকআপ বা এন্ড-টু-এন্ড এনক্রিপশন না থাকে, যেমন স্ক্রিন লক।
    সব ক্ষেত্রে ক্রেডেনশিয়াল রিস্টোর করার সুবিধা তৈরি করা হয়েছে কিনা তা নিশ্চিত করতে, আপনাকে অবশ্যই E2eeUnavailableException স্পষ্টভাবে ম্যানেজ করতে হবে, এর জন্য createCredential-এ কল করতে হবে এবং isCloudBackupEnabled-কে true-এ সেট করতে হবে। E2eeUnavailableException থ্রো করা হলে, ক্যাচ করুন এবং isCloudBackupEnabled-এর সাথে createCredential আবার কল করুন false-এ সেট করা আছে।
  • IllegalArgumentException: এই ব্যতিক্রমটি ঘটে যদি createRestoreRequest খালি থাকে বা সঠিক JSON না হয় অথবা এতে সঠিক user.id না থাকে যা WebAuthn স্পেসিফিকেশন মেনে চলে।

রিস্টোর কী ব্যবহার করে সাইন-ইন করুন

ডিভাইস সেট-আপ করার প্রসেস চলাকালীন ব্যবহারকারীকে সাইলেন্টলি সাইন-ইন করাতে 'ক্রেডেনশিয়াল রিস্টোর করুন' ফিচার ব্যবহার করুন।

অ্যাপ সার্ভার থেকে ক্রেডেনশিয়াল ফিরিয়ে আনার বিকল্প পান

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

রিস্টোর কী পান

নতুন ডিভাইসে ফিরিয়ে আনার ডিজিটাল চাবি পেতে, CredentialManager অবজেক্টে getCredential() মেথড কল করুন।

নিম্নলিখিত দুটি পরিস্থিতিতেই রিস্টোর 'কী' ফেচ করার সাজেশন দেওয়া হয়:

  • ডিভাইসে অ্যাপটি প্রথমবার লঞ্চ করার সময়। এই পরিস্থিতিতে ক্রেডেনশিয়াল ফিরিয়ে আনা অ্যাপ ডেটা ফিরিয়ে আনার থেকে আলাদা।
  • অ্যাপ ডেটা ব্যাক-আপ ও রিস্টোর করার সুবিধা চালু থাকলে, অ্যাপ ডেটা রিস্টোর করার সাথে সাথেই রিস্টোর কী পান। আপনার অ্যাপের ব্যাক-আপ কনফিগার করতে BackupAgent ব্যবহার করুন এবং onRestoreFinished কলব্যাকের মধ্যে getCredential কার্যকারিতা সম্পূর্ণ করার বিষয়টি নিশ্চিত করুন। onRestore পদ্ধতি ব্যবহার করবেন না, কারণ এটি শুধুমাত্র কী-ভ্যালু ব্যাক-আপের জন্য কল করা হয়, যেখানে onRestoreFinished যেকোনও ধরনের ব্যাক-আপ রিস্টোরের জন্য নির্ভরযোগ্যভাবে কল করা হয়। ব্যবহারকারী প্রথমবার নতুন ডিভাইস খুললে সম্ভাব্য দেরি এড়ানো যায় এবং আপনার অ্যাপ খোলার জন্য অপেক্ষা না করেই ব্যবহারকারী অ্যাপের সাথে ইন্টার‍্যাক্ট করতে পারেন। যেমন, নতুন ডিভাইসে প্রথমবার অ্যাপ খোলার আগেই আপনার অ্যাপ ব্যবহারকারীকে বিজ্ঞপ্তি পাঠাতে পারে, যা মেসেজিং বা কমিউনিকেশন অ্যাপের ক্ষেত্রে বিশেষভাবে প্রাসঙ্গিক।

আপনি যদি নতুন BackupAgent তৈরি করেন এবং আগে allowBackup="true"-এর সাথে ব্যাক-আপ চালু করে থাকেন, তাহলে আপনার অ্যাপের ম্যানিফেস্টে বুলিয়ান ভ্যালু android:fullBackupOnly="true" সেট করুন। এটি নিশ্চিত করে যে আপনার অ্যাপের ব্যাক-আপ এবং ফিরিয়ে আনার আচরণ বজায় রাখা হয়েছে।

// 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

ক্রেডেনশিয়াল ম্যানেজার API এই ধরনের উত্তর দেয় 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)