پذیرش شناسه از Google Wallet

آنلاین

شناسه های دیجیتال را می توان هم در برنامه و هم جریان های وب پذیرفت. برای پذیرش اعتبارنامه از Google Wallet باید:

  1. با استفاده از برنامه یا وب با پیروی از دستورالعمل های ارائه شده یکپارچه شوید و
  2. برای درخواست و موافقت با شرایط خدمات پذیرش اعتبارنامه از Google Wallet، این فرم را پر کنید.

پیش نیازها

برای آزمایش ارائه شناسه ها، ابتدا باید با استفاده از حساب آزمایشی مورد نظر در برنامه بتا عمومی ثبت نام کنید. متعاقباً، جزئیات بعدی را به مخاطب تعیین شده Google خود ارائه دهید.

  • پیوند شرایط خدمات
  • لوگو
  • وب سایت
  • شناسه بسته فروشگاه Play (برای ادغام برنامه اندروید)
  • شناسه Gmail که برای پیوستن به نسخه بتا عمومی استفاده شد

فرمت های اعتبار پشتیبانی شده

چندین استاندارد پیشنهادی وجود دارد که فرمت داده‌های اسناد هویت دیجیتال را تعریف می‌کنند، که دو مورد از آنها جذابیت صنعت را به دست می‌آورند:

  1. mdocs - توسط ISO تعریف شده است.
  2. اعتبارنامه قابل تأیید W3C - توسط W3C تعریف شده است.

در حالی که Android Credential Manager از هر دو فرمت پشتیبانی می کند، Google Wallet در حال حاضر فقط از شناسه های دیجیتال مبتنی بر mdoc پشتیبانی می کند.

تجربه کاربری

هنگامی که یک برنامه کاربردی ویژگی های هویت را درخواست می کند، فرآیند زیر رخ می دهد:

  1. کشف اعتبار: برنامه برای شناسایی اعتبارنامه هایی که می تواند درخواست را برآورده کند، کیف پول های موجود را جستجو می کند. سپس اندروید یک انتخابگر رابط کاربری سیستم را ارائه می دهد و اطلاعاتی را که قرار است به اشتراک گذاشته شود را نمایش می دهد. این به کاربر این امکان را می دهد که تصمیم آگاهانه ای در مورد استفاده از اعتبار بگیرد.

  2. انتخاب کاربر و تعامل کیف پول: کاربر یک اعتبار را انتخاب می کند و اندروید برنامه کیف پول مربوطه را برای تکمیل تراکنش فراخوانی می کند. برنامه کیف پول ممکن است صفحه رضایت خود را ارائه دهد یا نیاز به تأیید بیومتریک داشته باشد.

نتیجه: در صورت رضایت کاربر، اعتبار هویت انتخاب شده با برنامه درخواست کننده به اشتراک گذاشته می شود. اگر کاربر رد کند، یک خطا برگردانده می شود.

در برنامه

برای درخواست اعتبار هویت از برنامه‌های Android خود این مراحل را دنبال کنید:

به روز رسانی وابستگی ها

در build.gradle پروژه خود، وابستگی های خود را برای استفاده از Credential Manager (بتا) به روز کنید:

dependencies {
    implementation("androidx.credentials:credentials:1.5.0-alpha05")
    // 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-alpha05")
}

Credential Manager را پیکربندی کنید

برای پیکربندی و مقداردهی اولیه یک شی CredentialManager ، منطقی شبیه به زیر اضافه کنید:

// Use your app or activity context to instantiate a client instance of CredentialManager.
val credentialManager = IdentityCredentialManager.Companion.getClient(context)

ویژگی های هویت را درخواست کنید

// Retrieves the user's digital identites from wallet apps for your app.
val getIdentityCredentialOption = GetDigitalCredentialOption(
    requestJson = requestJson, // this is what partners needs to set, example JSON specified below
)
val result = credentialManager.getCredential(request = GetCredentialRequest(credentialOptions, ...)

تماس گیرنده برنامه تمام پارامترهای IdentityRequest را به عنوان یک رشته JSON ارائه می دهد. در اینجا به عنوان پارامتر requestMatcher از CredentialOption نشان داده می شود. Credential Manager خود را به محتوای آن json نمی پردازد. این درخواست json مستقیماً به کیف‌پول‌ها ارسال می‌شود، که سپس مسئول تجزیه آن و تصمیم‌گیری در مورد اعتبارنامه‌هایی هستند که می‌توانند درخواست را برآورده کنند. پیاده سازی کامل را می توان در برنامه نمونه یافت.

ما پیش‌بینی می‌کنیم که W3C این درخواست JSON را به عنوان یک مؤلفه از web API تعریف کند. این استانداردسازی مرورگرها را قادر می‌سازد تا درخواست را مستقیماً به اندروید ارسال کنند.

برای ارائه طعمی از ظاهر آن درخواست، در اینجا نمونه ای از درخواست mdoc آمده است:

{
  "selector": {
    "format": [
      "mdoc"
    ],
    "doctype": "org.iso.18013.5.1.mDL",
    "fields": [
      {
        "namespace": "org.iso.18013.5.1",
        "name": "family_name",
        "intentToRetain": false
      },
      {
        "namespace": "org.iso.18013.5.1",
        "name": "given_name",
        "intentToRetain": false
      },
      {
        "namespace": "org.iso.18013.5.1",
        "name": "age_over_21",
        "intentToRetain": false
      }
    ]
  },
  "nonce": "3cydsUF9xNFyBDAAWOct09hEeSqrFX2WB2r0G6f8Ol0=",
  "readerPublicKey": "BApmGdElal2-1dtafsdHVRa1EpAWZfhlQj_iof2I8L3V8_dCK1gVR0_12E4ZSQ2LcqXRd4zxVeKEqU1wUSgGWUU="
}

پاسخ یک شناسه توکن (رشته json) را که توسط W3C تعریف شده است، برمی گرداند. برنامه Wallet مسئول ایجاد این پاسخ است.

مثال:

{
    "token": "<base64 encoded response>"
}

ارسال رمز و پردازش بر روی سرور

پس از دریافت شناسه شناسه ، برنامه شما باید آن را برای تأیید به سرور برنامه شما ارسال کند. مرحله اولیه شامل رمزگشایی توکن از قالب base64 است. آرایه بایت به دست آمده نشان دهنده داده های CBOR است که به CDDL زیر پایبند است.

CredentialDocument = {
  "version": tstr,       // Set to "ANDROID-HPKE-v1"
  "pkEm": bstr,          // Public key, in uncompressed form
  "cipherText": bstr     // The encrypted data
}

مرحله بعدی محاسبه SessionTranscript از ISO/IEC 18013-5:2021 با ساختار Handover مخصوص اندروید است:

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
]

cipherText با استفاده از رمزگذاری HPKE رمزگذاری می شود. برای رمزگشایی آن، از SessionTranscript به‌عنوان داده‌های احراز هویت اضافی، به همراه کلید خصوصی EC که قبلاً تولید شده بود و تنظیمات زیر استفاده کنید:

  • KEM: DHKEM (P-256، HKDF-SHA256)
  • KDF: HKDF-SHA256
  • AEAD: AES-128-GCM

متن شفاف حاصل بایت های CBOR DeviceResponse است که در ISO/IEC 18013-5:2021 تعریف شده است. DeviceResponse باید طبق بند 9 ISO/IEC 18013-5:2021 تأیید شود. این شامل چندین مرحله است، مانند تأیید اینکه مبدأ mdoc از یک صادرکننده قابل اعتماد است و اینکه پاسخ توسط دستگاه مورد نظر امضا شده است. کلاس DeviceResponseParser از پروژه OpenWallet Foundation Identity Credential می تواند برای بخشی از این فرآیند اعتبار سنجی استفاده شود.

وب

برای درخواست اعتبار هویت با استفاده از Digital Credentials API در Chrome، باید برای نسخه آزمایشی اولیه Digital Credentials API ثبت نام کنید.

بصورت حضوری

پذیرش شناسه از Google Wallet به مراحل زیر نیاز دارد:

  • یک خواننده بسازید یا به دست آورید تا شناسه هایی را که توسط ISO 18013-5 تعریف شده است بپذیرید
  • گواهینامه های IACA را در خواننده بارگیری کنید تا مطمئن شوید شناسه های پذیرفته شده معتبر هستند
  • راه حل خود را تست کنید
  • برنامه خود را با Google Wallet ثبت کنید

یک خواننده بسازید یا به دست آورید تا شناسه هایی را که توسط ISO 18013-5 تعریف شده است بپذیرید

شناسه‌های موجود در Wallet بر اساس استاندارد ISO 18013-5 برای گواهینامه‌های رانندگان موبایل پیاده‌سازی می‌شوند. آنها از تعامل مبتنی بر NFC یا کد QR همراه با BLE به عنوان مکانیزم انتقال داده استفاده می کنند - بنابراین هر دستگاهی که بتواند آن جنبه های استاندارد را پیاده سازی کند می تواند به عنوان یک خواننده عمل کند، حتی یک برنامه تلفن همراه. از آنجایی که استاندارد باز است، چندین پیاده سازی شخص ثالث در بازار موجود است. همچنین، در صورت نیاز می توانید عملکرد را مستقیماً پیاده سازی کنید.

برای راهنمایی در مورد نحوه اجرای عملکرد خود، به برنامه Android مرجع خواننده منبع باز ما مراجعه کنید، که استاندارد ISO را اجرا می کند و می تواند mDL ها را از Google Wallet بپذیرد.

می‌توانید با ساخت و اجرای برنامه مرجع خواننده شروع کنید:

  • مخزن برنامه های مرجع را کلون کنید
  • پروژه را در Android Studio باز کنید
  • هدف appverifier را در دستگاه Android یا شبیه ساز خود بسازید و اجرا کنید.

گواهینامه های IACA را در خواننده بارگیری کنید تا مطمئن شوید شناسه های پذیرفته شده معتبر هستند

اعتبارسنجی یک اعتبار واقعی مستلزم داشتن یک شناسه در کیف پول از صادرکننده پشتیبانی شده است. فهرستی از صادرکنندگانی که توسط Google Wallet پشتیبانی می‌شوند به همراه پیوندهایی به گواهی‌های آنها برای تأیید ارائه شده است.

راه حل خود را تست کنید

برای آزمایش راه حل خود، برنامه Android دارنده مرجع منبع باز ما را بسازید و اجرا کنید. در اینجا مراحل ساخت و اجرای برنامه دارنده مرجع آورده شده است:

  • مخزن برنامه های مرجع را کلون کنید
  • پروژه را در Android Studio باز کنید
  • هدف appholder را در دستگاه یا شبیه ساز Android خود بسازید و اجرا کنید.

(اختیاری) درخواست خود را با Google Wallet ثبت کنید

با پر کردن این فرم درخواست خود را در Google Wallet ثبت کنید.