আপনার ব্যবহারকারীদের জন্য যাচাইকৃত ফোন নম্বর পেতে ডিজিটাল ক্রেডেনশিয়াল এপিআই কীভাবে ব্যবহার করবেন তা এই নির্দেশিকাটির বিশদ বিবরণ। প্রক্রিয়া দুটি ধাপ জড়িত:
- একটি
TS.43 token
অনুরোধ করুন : আপনার ক্লায়েন্ট অ্যাপ ("যাচাইকারী") ব্যবহারকারীর ডিভাইস থেকে একটি অস্থায়ী TS.43 টোকেনের অনুরোধ করে৷TS.43 token
হল একটি ক্যারিয়ার-ইস্যু করা শংসাপত্র যা ব্যবহারকারীর পরিচয় উপস্থাপন করে। - একটি ফোন নম্বরের জন্য টোকেন বিনিময় করুন : আপনার অ্যাপের ব্যাকএন্ড
TS.43 token
একটি এগ্রিগেটর বা ব্যবহারকারীর যাচাইকৃত ফোন নম্বরের জন্য একটি ক্যারিয়ারের সাথে বিনিময় করে৷
পূর্বশর্ত
DigitalCredential API এর সাথে ফোন নম্বর যাচাইকরণ বাস্তবায়ন করতে, আপনার একটি এগ্রিগেটরের সাথে একটি অ্যাকাউন্ট প্রয়োজন। একজন অ্যাগ্রিগেটর ক্যারিয়ারের সাথে ইন্টারঅ্যাক্ট করে এবং আপনার অ্যাপের জন্য প্রয়োজনীয় API পৃষ্ঠ প্রদান করে, সাধারণত বিলযোগ্য ক্লাউড API এন্ডপয়েন্ট হিসাবে।
আপনাকে আপনার Gradle বিল্ড স্ক্রিপ্টে নিম্নলিখিত নির্ভরতা যোগ করতে হবে:
কোটলিন
dependencies { implementation("androidx.credentials:credentials:1.6.0-alpha05") implementation("androidx.credentials:credentials-play-services-auth:1.6.0-alpha05") }
গ্রোভি
dependencies { implementation "androidx.credentials:credentials:1.6.0-alpha05" implementation "androidx.credentials:credentials-play-services-auth:1.6.0-alpha05" }
বাস্তবায়ন
শেষ থেকে শেষ প্রক্রিয়াটি সাধারণত এই পদক্ষেপগুলি অনুসরণ করে:
- একটি এগ্রিগেটর থেকে DCQL (ডিজিটাল ক্রেডেনশিয়াল কোয়েরি ল্যাঙ্গুয়েজ) প্যারামিটারের জন্য অনুরোধ করুন : এক বা একাধিক অ্যাগ্রিগেটরকে কল করুন এবং DCQL প্যারামিটারগুলির একটি সেটের জন্য অনুরোধ করুন। DCQL আপনাকে প্রতিটি অ্যাগ্রিগেটর থেকে আপনার প্রয়োজনীয় সঠিক ডিজিটাল শংসাপত্রগুলি নির্দিষ্ট করতে দেয়।
OpenID4VP অনুরোধ তৈরি করুন : আপনার অ্যাপের ব্যাকএন্ড থেকে, OpenID4VP অনুরোধটি তৈরি করুন, যখন এগ্রিগেটর থেকে DCQL প্যারামিটারগুলি অন্তর্ভুক্ত করুন৷ তারপর, আপনার ক্লায়েন্ট অ্যাপে OpenID4VP অনুরোধ পাঠান।
ক্রেডেনশিয়াল ম্যানেজার API কল করুন : আপনার ক্লায়েন্ট অ্যাপে, অপারেটিং সিস্টেমে OpenID4VP অনুরোধ পাঠাতে ক্রেডেনশিয়াল ম্যানেজার API ব্যবহার করুন। প্রতিক্রিয়া হিসাবে, আপনি একটি OpenID4VP প্রতিক্রিয়া অবজেক্ট পাবেন যেখানে
TS.43 Digital Credential
রয়েছে। এই শংসাপত্রটি এনক্রিপ্ট করা হয়েছে এবং শুধুমাত্র সংশ্লিষ্ট এগ্রিগেটর দ্বারা ডিক্রিপ্ট করা যেতে পারে। ক্যারিয়ার টোকেন পাওয়ার পর, আপনার ক্লায়েন্ট অ্যাপ থেকে অ্যাপের ব্যাকএন্ডে প্রতিক্রিয়া পাঠান।প্রতিক্রিয়া যাচাই করুন : আপনার অ্যাপের ব্যাকএন্ডে, 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
অবজেক্ট তৈরি করুন DCQL ক্রেডেনশিয়াল অবজেক্টটিকে একটি dcql_query
অবজেক্টের মধ্যে নেস্ট করা একটি credentials
অ্যারেতে রেখে নিচের উদাহরণে দেখানো হয়েছে:
"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 ক্রেডেনশিয়াল অবজেক্টের নন্স অবশ্যই এই নন্সের সাথে মিলবে। -
dcql_query
: এই ক্ষেত্রে, একটিTS.43 Digital Credential
অনুরোধ করা হচ্ছে তা নির্দিষ্ট করতেdcql_query
ব্যবহার করুন। এছাড়াও আপনি এখানে অন্যান্য ডিজিটাল শংসাপত্রের জন্য অনুরোধ করতে পারেন।
তারপরে, OpenID4VP অনুরোধটিকে একটি DigitalCredential API অনুরোধ অবজেক্টে মুড়ে ক্লায়েন্ট অ্যাপে পাঠান।
{
"requests":
[
{
"protocol": "openid4vp-v1-unsigned",
"data": {
"response_type": "vp_token",
"response_mode": "dc_api",
"nonce": "...",
"dcql_query": { ... }
}
}
]
}
নিম্নলিখিত স্নিপেট প্রদর্শন করে কিভাবে DigitalCredential 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-কে কল করুন
আপনার ক্লায়েন্ট অ্যাপে, আপনার অ্যাপের ব্যাকএন্ড দ্বারা প্রদত্ত DigitalCredential 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.
}
}
}
আপনার ক্লায়েন্ট অ্যাপ থেকে, ডিজিটাল ক্রেডেনশিয়াল API প্রতিক্রিয়াটি ব্যাকএন্ড সার্ভারে ফেরত পাঠান যেখানে এটি যাচাই করা যেতে পারে এবং একটি এগ্রিগেটরের সাথে যাচাইকৃত ফোন নম্বর বিনিময় করতে ব্যবহার করা যেতে পারে।
ডিজিটাল শংসাপত্রের প্রতিক্রিয়া যাচাই করুন
আপনার অ্যাপের ব্যাকএন্ডে কীভাবে প্রতিক্রিয়া পার্স করবেন এবং যাচাইকরণের ধাপটি সম্পাদন করবেন তার একটি উদাহরণ নিচে দেওয়া হল:
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)