এই নির্দেশিকাটিতে আপনার ব্যবহারকারীদের জন্য যাচাইকৃত ফোন নম্বর পেতে DigitalCredential API কীভাবে ব্যবহার করবেন তার বিশদ বিবরণ দেওয়া হয়েছে। এই প্রক্রিয়াটিতে দুটি ধাপ অন্তর্ভুক্ত রয়েছে:
- একটি
TS.43 tokenঅনুরোধ করুন : আপনার ক্লায়েন্ট অ্যাপ ("যাচাইকারী") ব্যবহারকারীর ডিভাইস থেকে একটি অস্থায়ী TS.43 টোকেন অনুরোধ করে।TS.43 tokenহল একটি ক্যারিয়ার-ইস্যু করা শংসাপত্র যা ব্যবহারকারীর পরিচয় উপস্থাপন করে। - টোকেনটি একটি ফোন নম্বরের সাথে বিনিময় করুন : আপনার অ্যাপের ব্যাকএন্ড ব্যবহারকারীর যাচাইকৃত ফোন নম্বরের জন্য একটি অ্যাগ্রিগেটর বা ক্যারিয়ারের সাথে
TS.43 tokenবিনিময় করে।
অ্যান্ড্রয়েড সংস্করণের সামঞ্জস্য
ফোন নম্বর যাচাইকরণ API অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং তার উচ্চতর সংস্করণে সমর্থিত।
পূর্বশর্ত
DigitalCredential API দিয়ে ফোন নম্বর যাচাইকরণ বাস্তবায়ন করতে, আপনার একটি অ্যাগ্রিগেটর সহ একটি অ্যাকাউন্ট প্রয়োজন। একজন অ্যাগ্রিগেটর ক্যারিয়ারগুলির সাথে যোগাযোগ করে এবং আপনার অ্যাপের জন্য প্রয়োজনীয় API পৃষ্ঠ সরবরাহ করে, সাধারণত একটি বিলযোগ্য ক্লাউড API এন্ডপয়েন্ট হিসাবে।
আপনার গ্রেডল বিল্ড স্ক্রিপ্টে নিম্নলিখিত নির্ভরতাগুলিও যুক্ত করতে হবে:
কোটলিন
dependencies { implementation("androidx.credentials:credentials:1.6.0-rc02") implementation("androidx.credentials:credentials-play-services-auth:1.6.0-rc02") }
গ্রোভি
dependencies { implementation "androidx.credentials:credentials:1.6.0-rc02" implementation "androidx.credentials:credentials-play-services-auth:1.6.0-rc02" }
বাস্তবায়ন
এন্ড-টু-এন্ড প্রক্রিয়াটি সাধারণত এই ধাপগুলি অনুসরণ করে:
- একটি অ্যাগ্রিগেটরের কাছ থেকে DCQL (ডিজিটাল ক্রেডেনশিয়াল কোয়েরি ল্যাঙ্গুয়েজ) প্যারামিটার অনুরোধ করুন : এক বা একাধিক অ্যাগ্রিগেটরকে কল করুন এবং DCQL প্যারামিটারের একটি সেট অনুরোধ করুন। DCQL আপনাকে প্রতিটি অ্যাগ্রিগেটরের কাছ থেকে প্রয়োজনীয় সঠিক ডিজিটাল ক্রেডেনশিয়ালগুলি নির্দিষ্ট করতে দেয়।
OpenID4VP অনুরোধ তৈরি করুন : আপনার অ্যাপের ব্যাকএন্ড থেকে, OpenID4VP অনুরোধ তৈরি করুন, এবং অ্যাগ্রিগেটর থেকে DCQL প্যারামিটারগুলি অন্তর্ভুক্ত করুন। তারপর, আপনার ক্লায়েন্ট অ্যাপে OpenID4VP অনুরোধটি পাঠান।
ক্রেডেনশিয়াল ম্যানেজার API কল করুন : আপনার ক্লায়েন্ট অ্যাপে, ক্রেডেনশিয়াল ম্যানেজার API ব্যবহার করে অপারেটিং সিস্টেমে OpenID4VP অনুরোধ পাঠান। প্রতিক্রিয়ায়, আপনি
TS.43 Digital Credentialধারণকারী একটি OpenID4VP প্রতিক্রিয়া অবজেক্ট পাবেন। এই ক্রেডেনশিয়ালটি এনক্রিপ্ট করা আছে এবং শুধুমাত্র সংশ্লিষ্ট অ্যাগ্রিগেটর দ্বারা ডিক্রিপ্ট করা যেতে পারে। ক্যারিয়ার টোকেন পাওয়ার পরে, আপনার ক্লায়েন্ট অ্যাপ থেকে প্রতিক্রিয়াটি অ্যাপের ব্যাকএন্ডে পাঠান।প্রতিক্রিয়া যাচাই করুন : আপনার অ্যাপের ব্যাকএন্ডে, OpenID4VP প্রতিক্রিয়া যাচাই করুন।
ফোন নম্বরের বিনিময় : আপনার অ্যাপের ব্যাকএন্ড থেকে,
TS.43 Digital Credentialঅ্যাগ্রিগেটরের কাছে পাঠান। অ্যাগ্রিগেটর ক্রেডেনশিয়ালটি যাচাই করে এবং যাচাইকৃত ফোন নম্বরটি ফেরত দেয়।
একটি অ্যাগ্রিগেটরের কাছ থেকে DCQL প্যারামিটারের অনুরোধ করুন
আপনার অ্যাপের ব্যাকএন্ড থেকে, ডিজিটাল ক্রেডেনশিয়াল কোয়েরি ল্যাঙ্গুয়েজ (DCQL) ক্রেডেনশিয়াল অবজেক্টের জন্য অ্যাগ্রিগেটরের কাছে একটি অনুরোধ পাঠান। আপনার অনুরোধে একটি নন্স এবং একটি অনুরোধ আইডি প্রদান করতে ভুলবেন না। অ্যাগ্রিগেটর DCQL ক্রেডেনশিয়াল অবজেক্টটি ফেরত দেয়, যার কাঠামো নিম্নলিখিতগুলির মতো:
{
// The credential ID is mapped to the request ID that is sent in your request to the aggregator.
"id": "aggregator1",
"format": "dc-authorization+sd-jwt",
"meta": {
"vct_values": [
"number-verification/device-phone-number/ts43"
],
"credential_authorization_jwt": "..."
},
"claims": [
{
"path": ["subscription_hint"],
"values": [1]
},
{
"path": ["phone_number_hint"],
"values": ["+14155552671"]
}
]
}
OpenID4VP অনুরোধ তৈরি করুন
প্রথমে, আপনার অ্যাপের ব্যাকএন্ড থেকে, নিম্নলিখিত উদাহরণে দেখানো dcql_query অবজেক্টের মধ্যে নেস্টেড একটি credentials অ্যারেতে DCQL ক্রেডেনশিয়াল অবজেক্ট স্থাপন করে একটি dcql_query অবজেক্ট তৈরি করুন:
"dcql_query": {
"credentials": [
"id": "aggregator1",
"format": "dc-authorization+sd-jwt",
"meta": {
"vct_values": [
"number-verification/device-phone-number/ts43"
],
"credential_authorization_jwt": "..."
},
"claims": [
{
"path": ["subscription_hint"],
"values": [1]
},
{
"path": ["phone_number_hint"],
"values": ["+14155552671"]
}
]
]
}
তারপর, নিম্নলিখিত কাঠামো সহ একটি OpenID4VP অনুরোধ তৈরি করুন:
{
"protocol": "openid4vp-v1-unsigned",
"data": {
"response_type": "vp_token",
"response_mode": "dc_api",
"nonce": "...",
"dcql_query": { ... }
}
}
-
protocol: ফোন নম্বর যাচাইকরণের অনুরোধের জন্যopenid4vp-v1-unsignedএ সেট করতে হবে। -
response_typeএবংresponse_mode: যথাক্রমেvp_tokenএবংdc_apiস্থির মান সহ অনুরোধের বিন্যাস নির্দেশ করে এমন ধ্রুবক। -
nonce: প্রতিটি অনুরোধের জন্য আপনার ব্যাকএন্ড দ্বারা তৈরি একটি অনন্য মান। অ্যাগ্রিগেটর DCQL শংসাপত্র বস্তুর nonce অবশ্যই এই nonce এর সাথে মেলে। -
dcql_query: এই ক্ষেত্রে,dcql_queryব্যবহার করে উল্লেখ করুন যে একটিTS.43 Digital Credentialঅনুরোধ করা হচ্ছে। আপনি এখানে অন্যান্য ডিজিটাল শংসাপত্রেরও অনুরোধ করতে পারেন।
তারপর, OpenID4VP অনুরোধটি একটি DigitalCredential API অনুরোধ অবজেক্টে মুড়ে ক্লায়েন্ট অ্যাপে পাঠান।
{
"requests":
[
{
"protocol": "openid4vp-v1-unsigned",
"data": {
"response_type": "vp_token",
"response_mode": "dc_api",
"nonce": "...",
"dcql_query": { ... }
}
}
]
}
নিম্নলিখিত স্নিপেটটি ডিজিটাল ক্রেডেনশিয়াল API অনুরোধ কীভাবে তৈরি করতে হয় তা দেখায়:
def GenerateDCRequest():
credentials = []
aggregator1_dcql = call_aggregator_endpoint(nonce, "aggregator1", additional_params)
credentials.append(aggregator1_dcql) # You can optionally work with multiple
# aggregators, or request other types of credentials
val dc_request =
{
"requests":
[
{
"protocol": "openid4vp-v1-unsigned",
"data": {
"response_type": "vp_token",
"response_mode": "dc_api",
"nonce": "...",
"dcql_query": {"credentials": credentials}
}
}
]
}
return dc_request
ক্রেডেনশিয়াল ম্যানেজার API-তে কল করুন
আপনার ক্লায়েন্ট অ্যাপে, আপনার অ্যাপের ব্যাকএন্ড দ্বারা প্রদত্ত ডিজিটাল ক্রেডেনশিয়াল API অনুরোধের মাধ্যমে ক্রেডেনশিয়াল ম্যানেজার API-তে কল করুন।
val requestJson = generateTs43DigitalCredentialRequestFromServer()
val digiCredOption = GetDigitalCredentialOption(requestJson = requestJson)
val getCredRequest = GetCredentialRequest(
listOf(digiCredOption)
)
coroutineScope.launch {
try {
val response = credentialManager.getCredential(
context = activityContext,
request = getCredRequest
)
val credential = response.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}")
}
}
} catch (e : GetCredentialException) {
// If user cancels the operation, the feature isn't available, or the
// SIM doesn't support the feature, a GetCredentialCancellationException
// will be returned. Otherwise, a GetCredentialUnsupportedException will
// be returned with details in the exception message.
handleFailure(e)
}
}
DigitalCredential API প্রতিক্রিয়াতে OpenID4VP প্রতিক্রিয়া থাকে। DigitalCredential ফলাফল থেকে একটি সাধারণ ক্রেডেনশিয়াল json নিম্নরূপ:
{
"protocol": "openid4vp-v1-unsigned",
"data": {
"vp_token": {
"aggregator1": ["eyJhbGciOiAiRVMy..."] # The encrypted TS.43 Digital
# Credential in an array structure.
}
}
}
আপনার ক্লায়েন্ট অ্যাপ থেকে, ডিজিটাল ক্রেডেনশিয়াল এপিআই রেসপন্সটি ব্যাকএন্ড সার্ভারে ফেরত পাঠান যেখানে এটি যাচাই করা যেতে পারে এবং একটি অ্যাগ্রিগেটরের সাথে যাচাইকৃত ফোন নম্বর বিনিময় করতে ব্যবহার করা যেতে পারে।
ডিজিটাল শংসাপত্রের প্রতিক্রিয়া যাচাই করুন
আপনার অ্যাপের ব্যাকএন্ডে প্রতিক্রিয়াটি বিশ্লেষণ করে যাচাইকরণের ধাপটি কীভাবে সম্পাদন করবেন তার একটি উদাহরণ নিচে দেওয়া হল:
def processDigitalCredentialsResponse(response):
# Step 1: Parse out the TS.43 Digital Credential from the response
openId4VpResponse = response['data']
ts43_digital_credential = response['vp_token']["aggregator1"][0]
# Step 2: Perform response validation
verifyResponse(ts43_digital_credential)
def verifyResponse(ts43_digital_credential):
# The returned ts43_digital_credential is an SD-JWT-based Verifiable Credentials
# (SD-JWT VC) as defined in this IETF spec. The section 3.4 of the specification
# outlines how to validate the credential. At a high level, the steps involves
# validating (1) the nonce in the response credential matches the one in the
# request, (2) the integrity of the credential by checking the credential is
# signed by the trusted issuer Android Telephony, and (3) other validity
# properties associated with this credential, such as issue time and expiration
# time
# In most cases, you can use an SD-JWT VC library to perform these validations.
# Some aggregators may also perform the validation logic for you. Check with your
# aggregator to decide the exact scope of the validation required.
ফোন নম্বর বিনিময় করুন
আপনার অ্যাপের ব্যাকএন্ড থেকে, যাচাইকৃত TS.43 Digital Credential অ্যাগ্রিগেটরের এন্ডপয়েন্টে পাঠান, যাতে ক্রেডেনশিয়ালটি যাচাই করা যায় এবং যাচাইকৃত ফোন নম্বরটি গ্রহণ করা যায়।
def processDigitalCredentialsResponse(response):
# ... prior steps
# Step 3: Call aggregator endpoint to exchange the verified phone number
callAggregatorPnvEndpoint(ts43_digital_credential)