Прием идентификаторов из Google Кошелька

Онлайн

Цифровые идентификаторы можно принимать как внутри приложения , так и через Интернет . Чтобы принять учетные данные от Google Кошелька, вам необходимо:

  1. Выполните интеграцию с помощью приложения или через Интернет, следуя предоставленным инструкциям и
  2. Заполните эту форму , чтобы запросить и принять условия использования учетных данных из Google Кошелька.

Предварительные условия

Чтобы протестировать представление идентификаторов, вам необходимо сначала зарегистрироваться в общедоступной бета-программе, используя предполагаемую тестовую учетную запись. Затем предоставьте следующую информацию назначенному контактному лицу в Google.

  • Ссылка на Условия использования
  • Логотип
  • Веб-сайт
  • Идентификатор пакета Play Store (для интеграции приложений Android)
  • Идентификатор Gmail, который использовался для присоединения к общедоступной бета-версии.

Поддерживаемые форматы учетных данных

Существует несколько предложенных стандартов, определяющих формат данных цифровых идентификационных документов, два из которых получили значительную популярность в отрасли:

  1. mdocs — определяется ISO.
  2. Проверяемые учетные данные W3C — определяются W3C.

Хотя Android Credential Manager поддерживает оба формата, Google Wallet на данный момент поддерживает только цифровые идентификаторы на основе mdoc.

Пользовательский опыт

Когда приложение запрашивает атрибуты идентификации, происходит следующий процесс:

  1. Обнаружение учетных данных: приложение запрашивает доступные кошельки, чтобы определить учетные данные, которые могут удовлетворить запрос. Затем Android представляет селектор системного пользовательского интерфейса, отображающий информацию, которой нужно поделиться. Это позволяет пользователю принять обоснованное решение о том, какие учетные данные использовать.

  2. Выбор пользователя и взаимодействие с кошельком: пользователь выбирает учетные данные, а Android вызывает соответствующее приложение кошелька для завершения транзакции. Приложение кошелька может отображать собственный экран согласия или требовать биометрического подтверждения.

Результат: если пользователь соглашается, выбранные идентификационные данные передаются запрашивающему приложению. Если пользователь отклоняет запрос, возвращается ошибка.

В приложении

Чтобы запросить учетные данные из приложений Android, выполните следующие действия:

Обновить зависимости

В build.gradle вашего проекта обновите зависимости, чтобы использовать диспетчер учетных данных (бета-версия):

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")
}

Настройте диспетчер учетных данных

Чтобы настроить и инициализировать объект 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. Диспетчер учетных данных не интересуется содержимым этого json. Этот json-запрос будет передан непосредственно в кошельки, которые затем будут его анализировать и решать, какие учетные данные могут выполнить запрос. Полную реализацию можно найти в примере приложения .

Мы ожидаем, что W3C определит этот запрос JSON как компонент веб-API. Эта стандартизация позволит браузерам напрямую передавать запросы на Android.

Чтобы представить, как может выглядеть этот запрос, вот образец запроса 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="
}

В ответ возвращается идентификаторidentToken (строка JSON), определенный W3C. Приложение Wallet отвечает за подготовку этого ответа.

Пример:

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

Отправить токен и обработать на сервере

После полученияidentToken ваше приложение должно передать его на сервер приложений для проверки. Начальный шаг включает декодирование токена из формата 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 со структурой передачи обслуживания, специфичной для 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
]

CipherText шифруется с использованием шифрования HPKE. Чтобы расшифровать его, используйте SessionTranscript в качестве дополнительных аутентифицированных данных вместе с сгенерированным ранее закрытым ключом EC и следующими настройками:

  • КЕМ: ДХКЕМ(П-256, ХКДФ-ША256)
  • КДФ: HKDF-SHA256
  • АЕАД: 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, вам необходимо подписаться на пробную версию Origin Digital Credentials API.

Лично

Для принятия идентификаторов из Google Кошелька необходимо выполнить следующие действия:

  • Создайте или приобретите считыватель для приема идентификаторов, определенных стандартом ISO 18013-5.
  • Загрузите сертификаты IACA в считывающее устройство, чтобы убедиться в подлинности принятых идентификаторов.
  • Проверьте свое решение
  • Зарегистрируйте свое приложение в Google Кошельке

Создайте или приобретите считыватель для приема идентификаторов, определенных стандартом ISO 18013-5.

Идентификаторы в Кошельке реализованы в соответствии со стандартом ISO 18013-5 для мобильных водительских прав. Они используют NFC или взаимодействие с QR-кодом вместе с BLE в качестве механизма передачи данных, поэтому любое устройство, которое может реализовать эти аспекты стандарта, может выступать в качестве считывателя, даже мобильное приложение. Поскольку стандарт открыт, на рынке доступно несколько сторонних реализаций. Кроме того, при необходимости вы можете реализовать эту функциональность напрямую.

Инструкции о том, как самостоятельно реализовать эту функциональность, можно найти в нашем Android- приложении для чтения ссылок с открытым исходным кодом, которое реализует стандарт ISO и может принимать mDL из Google Кошелька.

Вы можете начать с создания и запуска приложения для чтения ссылок:

  • Клонировать репозиторий эталонных приложений
  • Откройте проект в Android Studio.
  • Создайте и запустите цель appverifier на своем устройстве Android или в эмуляторе.

Загрузите сертификаты IACA в считывающее устройство, чтобы убедиться в подлинности принятых идентификаторов.

Для проверки реальных учетных данных необходимо иметь идентификатор в кошельке от поддерживаемого эмитента. Список эмитентов, поддерживаемых Google Кошельком, приведен ниже вместе со ссылками на их сертификаты для проверки.

Проверьте свое решение

Чтобы протестировать свое решение, создайте и запустите наше приложение для Android с открытым исходным кодом. Вот шаги по созданию и запуску приложения-держателя ссылок:

  • Клонировать репозиторий эталонных приложений
  • Откройте проект в Android Studio.
  • Создайте и запустите целевой appholder на своем устройстве Android или в эмуляторе.

(Необязательно) Зарегистрируйте свое приложение в Google Кошельке.

Зарегистрируйте свое приложение в Google Кошельке, заполнив эту форму .