অনলাইন
ডিজিটাল আইডি ইন-অ্যাপ এবং ওয়েব ফ্লো উভয়ই গ্রহণ করা যেতে পারে। Google Wallet থেকে শংসাপত্রগুলি গ্রহণ করতে আপনার প্রয়োজন হবে:
- প্রদত্ত নির্দেশাবলী অনুসরণ করে অ্যাপ বা ওয়েব ব্যবহার করে সংহত করুন এবং
- Google Wallet থেকে শংসাপত্র গ্রহণের পরিষেবার শর্তাবলীর অনুরোধ এবং সম্মতি জানাতে এই ফর্মটি পূরণ করুন৷
পূর্বশর্ত
আইডিগুলির উপস্থাপনা পরীক্ষা করার জন্য, আপনাকে প্রথমে উদ্দেশ্যযুক্ত পরীক্ষা অ্যাকাউন্ট ব্যবহার করে সর্বজনীন বিটা প্রোগ্রামে নথিভুক্ত করতে হবে। পরবর্তীকালে, আপনার মনোনীত Google পরিচিতিতে পরবর্তী বিশদগুলি সরবরাহ করুন৷
- পরিষেবার শর্তাবলী লিঙ্ক
- লোগো
- ওয়েবসাইট
- প্লে স্টোর প্যাকেজ আইডি (অ্যান্ড্রয়েড অ্যাপ ইন্টিগ্রেশনের জন্য)
- জিমেইল আইডি যা সর্বজনীন বিটাতে যোগদানের জন্য ব্যবহার করা হয়েছিল
সমর্থিত শংসাপত্র বিন্যাস
বেশ কয়েকটি প্রস্তাবিত মান বিদ্যমান যা ডিজিটাল পরিচয় নথিগুলির ডেটা বিন্যাসকে সংজ্ঞায়িত করে, দুটি উল্লেখযোগ্য শিল্প আকর্ষণ অর্জনের সাথে:
- mdocs - ISO দ্বারা সংজ্ঞায়িত।
- W3C যাচাইযোগ্য শংসাপত্র - W3C দ্বারা সংজ্ঞায়িত।
অ্যান্ড্রয়েড ক্রেডেনশিয়াল ম্যানেজার উভয় ফর্ম্যাট সমর্থন করে, Google Wallet এই মুহূর্তে শুধুমাত্র mdoc ভিত্তিক ডিজিটাল আইডি সমর্থন করে।
ব্যবহারকারীর অভিজ্ঞতা
যখন একটি অ্যাপ্লিকেশন পরিচয় বৈশিষ্ট্যের জন্য অনুরোধ করে, নিম্নলিখিত প্রক্রিয়াটি ঘটে:
শংসাপত্রের আবিষ্কার: অ্যাপ্লিকেশনটি শংসাপত্রগুলি সনাক্ত করতে উপলব্ধ ওয়ালেটগুলি অনুসন্ধান করে যা অনুরোধটি সন্তুষ্ট করতে পারে। অ্যান্ড্রয়েড তারপর একটি সিস্টেম UI নির্বাচক উপস্থাপন করে, শেয়ার করা তথ্য প্রদর্শন করে। এটি ব্যবহারকারীকে কোন শংসাপত্র ব্যবহার করতে হবে সে সম্পর্কে একটি জ্ঞাত সিদ্ধান্ত নিতে দেয়।
ব্যবহারকারী নির্বাচন এবং ওয়ালেট ইন্টারঅ্যাকশন: ব্যবহারকারী একটি শংসাপত্র নির্বাচন করে এবং লেনদেনটি সম্পূর্ণ করতে Android সংশ্লিষ্ট ওয়ালেট অ্যাপকে আহ্বান করে। ওয়ালেট অ্যাপ তার নিজস্ব সম্মতি স্ক্রিন উপস্থাপন করতে পারে বা বায়োমেট্রিক নিশ্চিতকরণের প্রয়োজন হতে পারে।
ফলাফল: ব্যবহারকারী সম্মতি দিলে, নির্বাচিত পরিচয় শংসাপত্র অনুরোধকারী অ্যাপ্লিকেশনের সাথে ভাগ করা হয়। ব্যবহারকারী প্রত্যাখ্যান করলে, একটি ত্রুটি ফেরত দেওয়া হয়।
অ্যাপে
আপনার অ্যান্ড্রয়েড অ্যাপ থেকে পরিচয় শংসাপত্রের অনুরোধ করতে এই পদক্ষেপগুলি অনুসরণ করুন:
নির্ভরতা আপডেট করুন
আপনার প্রকল্পের build.gradle-এ, ক্রেডেনশিয়াল ম্যানেজার (বিটা) ব্যবহার করতে আপনার নির্ভরতা আপডেট করুন:
dependencies {
implementation("androidx.credentials:credentials:1.5.0-beta01")
// optional - needed for credentials support from play services, for devices running Android 13 and below.
implementation("androidx.credentials:credentials-play-services-auth:1.5.0-beta01")
}
ক্রেডেনশিয়াল ম্যানেজার কনফিগার করুন
একটি CredentialManager
অবজেক্ট কনফিগার এবং আরম্ভ করতে, নিম্নলিখিত অনুরূপ যুক্তি যোগ করুন:
// Use your app or activity context to instantiate a client instance of CredentialManager.
val credentialManager = CredentialManager.create(context)
আইডেন্টিটি অ্যাট্রিবিউটের জন্য অনুরোধ করুন
পরিচয়ের অনুরোধের জন্য পৃথক পরামিতি নির্দিষ্ট করার পরিবর্তে, অ্যাপটি CredentialOption-এর মধ্যে JSON স্ট্রিং হিসাবে সেগুলিকে একসাথে প্রদান করে। ক্রেডেনশিয়াল ম্যানেজার এই JSON স্ট্রিংটিকে এর বিষয়বস্তু পরীক্ষা না করেই উপলব্ধ ডিজিটাল ওয়ালেটে পাস করে। প্রতিটি ওয়ালেট তখন এর জন্য দায়ী: - পরিচয় অনুরোধ বুঝতে JSON স্ট্রিং পার্সিং। - এর সংরক্ষিত শংসাপত্রগুলির কোনটি নির্ধারণ করা, যদি থাকে, অনুরোধটি পূরণ করে৷
এটা প্রত্যাশিত যে W3C আনুষ্ঠানিকভাবে ওয়েব API স্পেসিফিকেশনের অংশ হিসাবে এই JSON অনুরোধের কাঠামোকে সংজ্ঞায়িত করবে। যাইহোক, এটা মনে রাখা গুরুত্বপূর্ণ যে স্পেসিফিকেশনটি খসড়া আকারে এবং পরিবর্তন সাপেক্ষে।
প্রাথমিকভাবে, আমরা Google Wallet থেকে আইডি পেতে পূর্বরূপ প্রোটোকল ব্যবহার করব। ওয়েব API স্পেসিফিকেশন চূড়ান্ত হওয়ার সময় এটি আমাদের ইন্টিগ্রেশন এবং পরীক্ষা শুরু করতে দেয়।
প্রিভিউ প্রোটোকলের জন্য এখানে একটি mdoc requestJson
এর একটি নমুনা রয়েছে:
{
identity: {
providers: [{
holder: {
selector: {
format: ['mdoc'],
type: 'org.iso.18013.5.1.mDL',
fields: [
'org.iso.18013.5.1.family_name',
'org.iso.18013.5.1.portrait',
]
},
params: {
nonce: '1234',
readerPublicKey: '<public_key>',
extraParamAsNeededByWallets: true,
},
},
}]
}
}
// The request in the JSON format to conform with
// the JSON-ified Digital Credentials API request definition.
val requestJson = generateRequestFromServer()
val digitalCredentialOption =
GetDigitalCredentialOption(requestJson = requestJson)
// Use the option from the previous step to build the `GetCredentialRequest`.
val getCredRequest = GetCredentialRequest(
listOf(digitalCredentialOption)
)
coroutineScope.launch {
try {
val result = credentialManager.getCredential(
context = activityContext,
request = getCredRequest
)
verifyResult(result)
} catch (e : GetCredentialException) {
handleFailure(e)
}
}
// Handle the successfully returned credential.
fun verifyResult(result: GetCredentialResponse) {
val credential = result.credential
when (credential) {
is DigitalCredential -> {
val responseJson = credential.credentialJson
validateResponseOnServer(responseJson)
}
else -> {
// Catch any unrecognized credential type here.
Log.e(TAG, "Unexpected type of credential ${credential.type}")
}
}
}
// Handle failure.
fun handleFailure(e: GetCredentialException) {
when (e) {
is GetCredentialCancellationException -> {
// The user intentionally canceled the operation and chose not
// to share the credential.
}
is GetCredentialInterruptedException -> {
// Retry-able error. Consider retrying the call.
}
is NoCredentialException -> {
// No credential was available.
}
is CreateCredentialUnknownException -> {
// An unknown, usually unexpected, error has occurred. Check the
// message error for any additional debugging information.
}
is CreateCredentialCustomException -> {
// You have encountered a custom error thrown by the wallet.
// If you made the API call with a request object that's a
// subclass of CreateCustomCredentialRequest using a 3rd-party SDK,
// then you should check for any custom exception type constants
// within that SDK to match with e.type. Otherwise, drop or log the
// exception.
}
else -> Log.w(TAG, "Unexpected exception type ${e::class.java}")
}
}
প্রতিক্রিয়াটি W3C দ্বারা সংজ্ঞায়িত একটি আইডেন্টিটি টোকেন (json স্ট্রিং) প্রদান করে। Wallet অ্যাপ এই প্রতিক্রিয়া তৈরি করার জন্য দায়ী৷
উদাহরণ:
{
"token": "<base64 encoded response>"
}
টোকেন পাঠান এবং সার্ভারে প্রক্রিয়া করুন
আইডেন্টিটি টোকেন পাওয়ার পরে, আপনার অ্যাপ্লিকেশনটি যাচাইয়ের জন্য এটি আপনার অ্যাপ্লিকেশন সার্ভারে প্রেরণ করা উচিত। প্রাথমিক ধাপে বেস64 ফরম্যাট থেকে টোকেন ডিকোড করা জড়িত। ফলস্বরূপ বাইট অ্যারে CBOR ডেটা প্রতিনিধিত্ব করে, যা নিম্নলিখিত CDDL মেনে চলে।
CredentialDocument = {
"version": tstr, // Set to "ANDROID-HPKE-v1"
"pkEm": bstr, // Public key, in uncompressed form
"cipherText": bstr // The encrypted data
}
পরবর্তী ধাপ হল ISO/IEC 18013-5:2021 থেকে একটি Android-নির্দিষ্ট হ্যান্ডওভার স্ট্রাকচার সহ সেশন ট্রান্সক্রিপ্ট গণনা করা:
SessionTranscript = [
null, // DeviceEngagementBytes not available
null, // EReaderKeyBytes not available
AndroidHandover // Defined below
]
AndroidHandover = [
"AndroidHandoverv1", // Version number
nonce, // nonce that comes from request
appId, // RP package name
pkRHash, // The SHA256 hash of the recipient public key
]
সাইফার টেক্সট HPKE এনক্রিপশন ব্যবহার করে এনক্রিপ্ট করা হয়েছে। এটিকে ডিক্রিপ্ট করতে, পূর্বে তৈরি করা EC প্রাইভেট কী এবং নিম্নলিখিত সেটিংস সহ অতিরিক্ত প্রমাণীকৃত ডেটা হিসাবে SessionTranscript ব্যবহার করুন:
- KEM: DHKEM(P-256, HKDF-SHA256)
- KDF: HKDF-SHA256
- AEAD: AES-128-GCM
এর ফলে ক্লিয়ারটেক্সট হল ডিভাইস রেসপন্স CBOR বাইট যা ISO/IEC 18013-5:2021-এ সংজ্ঞায়িত করা হয়েছে। ডিভাইসের প্রতিক্রিয়া অবশ্যই ISO/IEC 18013-5:2021 ধারা 9 অনুসারে যাচাই করা উচিত। এতে বেশ কয়েকটি ধাপ রয়েছে, যেমন mdoc একটি বিশ্বস্ত ইস্যুকারীর কাছ থেকে এসেছে এবং প্রতিক্রিয়াটি উদ্দেশ্যযুক্ত ডিভাইস দ্বারা স্বাক্ষরিত হয়েছে তা যাচাই করা। OpenWallet ফাউন্ডেশন আইডেন্টিটি শংসাপত্র প্রকল্পের DeviceResponseParser ক্লাস এই বৈধতা প্রক্রিয়ার অংশের জন্য ব্যবহার করা যেতে পারে।
ওয়েব
Chrome-এ ডিজিটাল শংসাপত্র API ব্যবহার করে পরিচয় শংসাপত্রের অনুরোধ করতে, আপনাকে ডিজিটাল শংসাপত্র API অরিজিন ট্রায়ালের জন্য সাইন আপ করতে হবে।
ব্যক্তিগতভাবে
Google Wallet থেকে আইডি গ্রহণ করার জন্য নিম্নলিখিত পদক্ষেপগুলি প্রয়োজন:
- ISO 18013-5 দ্বারা সংজ্ঞায়িত আইডি গ্রহণ করার জন্য একটি পাঠক তৈরি করুন বা অর্জন করুন
- স্বীকৃত আইডিগুলি খাঁটি কিনা তা নিশ্চিত করতে পাঠকের মধ্যে IACA শংসাপত্রগুলি লোড করুন৷
- আপনার সমাধান পরীক্ষা করুন
- Google Wallet এর সাথে আপনার আবেদন নিবন্ধন করুন৷
ISO 18013-5 দ্বারা সংজ্ঞায়িত আইডি গ্রহণ করার জন্য একটি পাঠক তৈরি করুন বা অর্জন করুন
ওয়ালেটে আইডিগুলি মোবাইল ড্রাইভার লাইসেন্সের জন্য ISO 18013-5 মান অনুযায়ী প্রয়োগ করা হয়৷ তারা ডেটা ট্রান্সফার মেকানিজম হিসাবে BLE-এর সাথে NFC-ভিত্তিক বা QR কোড এনগেজমেন্ট ব্যবহার করে - তাই যে কোনও ডিভাইস যা স্ট্যান্ডার্ডের সেই দিকগুলি বাস্তবায়ন করতে পারে তা পাঠক, এমনকি একটি মোবাইল অ্যাপ্লিকেশন হিসাবে কাজ করতে পারে। স্ট্যান্ডার্ড খোলা থাকায় বাজারে বেশ কিছু তৃতীয় পক্ষের বাস্তবায়ন উপলব্ধ রয়েছে। পাশাপাশি, প্রয়োজন হলে আপনি কার্যকারিতা সরাসরি বাস্তবায়ন করতে পারেন।
কীভাবে কার্যকারিতা নিজেই প্রয়োগ করতে হয় তার নির্দেশনার জন্য, আমাদের ওপেন সোর্স রেফারেন্স রিডার অ্যান্ড্রয়েড অ্যাপ দেখুন, যা ISO মান প্রয়োগ করে এবং Google Wallet থেকে mDL গ্রহণ করতে পারে৷
আপনি রেফারেন্স রিডার অ্যাপ তৈরি এবং চালানোর মাধ্যমে শুরু করতে পারেন:
- রেফারেন্স অ্যাপস সংগ্রহস্থল ক্লোন করুন
- অ্যান্ড্রয়েড স্টুডিওতে প্রকল্পটি খুলুন
- আপনার অ্যান্ড্রয়েড ডিভাইস বা এমুলেটরে
appverifier
টার্গেট তৈরি করুন এবং চালান।
স্বীকৃত আইডিগুলি খাঁটি কিনা তা নিশ্চিত করতে পাঠকের মধ্যে IACA শংসাপত্রগুলি লোড করুন৷
একটি বাস্তব শংসাপত্র যাচাই করার জন্য আপনাকে একটি সমর্থিত ইস্যুকারীর কাছ থেকে ওয়ালেটে একটি আইডি থাকতে হবে৷ Google Wallet দ্বারা সমর্থিত ইস্যুকারীদের একটি তালিকা যাচাইয়ের জন্য তাদের শংসাপত্রগুলির লিঙ্ক সহ নীচে দেওয়া হয়েছে৷
আপনার সমাধান পরীক্ষা করুন
আপনার সমাধান পরীক্ষা করতে, আমাদের ওপেন সোর্স রেফারেন্স হোল্ডার অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করুন এবং চালান। এখানে রেফারেন্স হোল্ডার অ্যাপ তৈরি এবং চালানোর ধাপগুলি রয়েছে:
- রেফারেন্স অ্যাপস সংগ্রহস্থল ক্লোন করুন
- অ্যান্ড্রয়েড স্টুডিওতে প্রকল্পটি খুলুন
- আপনার অ্যান্ড্রয়েড ডিভাইস বা এমুলেটরে
appholder
টার্গেট তৈরি করুন এবং চালান।
(ঐচ্ছিক) Google Wallet এর সাথে আপনার আবেদন নিবন্ধন করুন৷
এই ফর্মটি পূরণ করে Google Wallet-এ আপনার আবেদন নিবন্ধন করুন৷