Accepter des pièces d'identité issues de Google Wallet

En ligne

Les pièces d'identité numériques peuvent être acceptées à la fois dans les flux d'application et dans les flux Web. Pour accepter les identifiants Google Wallet, procédez comme suit:

  1. Intégrez l'API à l'aide de l'application ou du Web en suivant les instructions fournies.
  2. Remplissez ce formulaire pour demander et accepter les conditions d'utilisation des identifiants Google Wallet.

Prérequis

Pour tester la présentation des pièces d'identité, vous devez d'abord vous inscrire au programme bêta public à l'aide du compte de test prévu. Fournissez ensuite les informations suivantes à votre contact Google désigné.

  • Lien vers les conditions d'utilisation
  • Logo
  • Site Web
  • ID de package Play Store (pour les intégrations d'applications Android)
  • ID Gmail utilisé pour rejoindre la version bêta publique

Formats d'identifiants compatibles

Plusieurs normes proposées définissent le format de données des documents d'identité numériques, dont deux gagnent en popularité dans le secteur:

  1. mdocs : définis par l'ISO.
  2. Identifiants vérifiables du W3C : définis par le W3C.

Bien que le Gestionnaire d'identifiants Android accepte les deux formats, Google Wallet n'accepte actuellement que les pièces d'identité numériques basées sur mdoc.

Expérience utilisateur

Lorsqu'une application demande des attributs d'identité, le processus suivant se produit:

  1. Découverte des identifiants:l'application interroge les portefeuilles disponibles pour identifier les identifiants pouvant répondre à la requête. Android présente ensuite un sélecteur d'interface utilisateur du système, qui affiche les informations à partager. Cela permet à l'utilisateur de prendre une décision éclairée sur les identifiants à utiliser.

  2. Sélection de l'utilisateur et interaction avec le portefeuille : l'utilisateur sélectionne des identifiants, et Android appelle l'application de portefeuille correspondante pour effectuer la transaction. L'application Wallet peut présenter son propre écran d'autorisation ou nécessiter une confirmation biométrique.

Résultat:Si l'utilisateur donne son consentement, les identifiants d'identité sélectionnés sont partagés avec l'application à l'origine de la demande. Si l'utilisateur refuse, une erreur est renvoyée.

Dans l'application

Pour demander des identifiants d'identité à vos applications Android, procédez comme suit :

Mettre à jour les dépendances

Dans le fichier build.gradle de votre projet, mettez à jour vos dépendances pour utiliser le Gestionnaire d'identifiants (bêta) :

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

Configurer le Gestionnaire d'identifiants

Pour configurer et initialiser un objet CredentialManager, ajoutez une logique semblable à celle-ci :

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

Attributs d'identité de la requête

// 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, ...)

L'appelant de l'application fournit tous les paramètres IdentityRequest sous forme de chaîne JSON. Ici, il est représenté par le paramètre requestMatcher de CredentialOption. Le Gestionnaire d'identifiants ne se préoccupe pas du contenu de ce fichier JSON. Cette requête JSON sera transmise directement aux portefeuilles, qui sont ensuite chargés de l'analyser et de déterminer quels identifiants peuvent répondre à la requête. Vous trouverez l'implémentation complète dans l'application exemple.

Le W3C devrait définir cette requête JSON comme un composant de l'API Web. Cette standardisation permettra aux navigateurs de transmettre directement la requête à Android.

Pour vous donner une idée de ce à quoi cette requête peut ressembler, voici un exemple de requête 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="
}

La réponse renvoie un identityToken (chaîne JSON), défini par le W3C. L'application Wallet est chargée de créer cette réponse.

Exemple :

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

Envoyer le jeton et le traiter sur le serveur

Une fois le identityToken reçu, votre application doit le transmettre à votre serveur d'application pour validation. La première étape consiste à décoder le jeton au format base64. La matrice d'octets générée représente les données CBOR, qui respectent la CDDL suivante.

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

L'étape suivante consiste à calculer le SessionTranscript à partir de la norme ISO/CEI 18013-5:2021 avec une structure de transfert spécifique à 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 est chiffré à l'aide du chiffrement HPKE. Pour le déchiffrer, utilisez SessionTranscript comme données authentifiées supplémentaires, ainsi que la clé privée EC générée précédemment et les paramètres suivants:

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

Le texte clair obtenu correspond aux octets CBOR de DeviceResponse, comme défini dans la norme ISO/CEI 18013-5:2021. DeviceResponse doit être validé conformément à la clause 9 de la norme ISO/CEI 18013-5:2021. Cette opération comprend plusieurs étapes, comme vérifier que le mdoc provient d'un émetteur de confiance et que la réponse est signée par l'appareil prévu. La classe DeviceResponseParser du projet d'identifiants d'identité de l'OpenWallet Foundation peut être utilisée pour une partie de ce processus de validation.

Web

Pour demander des identifiants d'identité à l'aide de l'API Digital Credentials sur Chrome, vous devez vous inscrire à la phase d'évaluation de l'API Digital Credentials.

En personne

Pour accepter les pièces d'identité issues de Google Wallet, suivez les étapes suivantes :

  • Créer ou acquérir un lecteur pour accepter les pièces d'identité comme défini dans la norme ISO 18013-5
  • Charger les certificats IACA dans le lecteur pour vous assurer que les pièces d'identité acceptées sont authentiques
  • Tester votre solution
  • Enregistrer votre application auprès de Google Wallet

Construire ou acquérir un lecteur pour accepter les pièces d'identité comme défini par la norme ISO 18013-5

Les pièces d'identité dans Wallet sont implémentées conformément à la norme ISO 18013-5 pour les permis de conduire mobiles. Elles utilisent le NFC ou les codes QR ainsi que le BLE comme mécanisme de transfert de données. Ainsi, tout appareil capable d'implémenter ces aspects de la norme peut servir de lecteur, même une application mobile. Puisque la norme est ouverte, plusieurs implémentations tierces sont disponibles sur le marché. Vous pouvez également implémenter la fonctionnalité directement si nécessaire.

Pour obtenir des conseils sur l'implémentation de cette fonctionnalité vous-même, consultez notre application Android pour les lecteurs de référence Open Source, qui implémente la norme ISO et peut accepter des mDL issus de Google Wallet.

Pour commencer, compilez et exécutez l'application pour les lecteurs de référence :

  • Clonez le dépôt des applications de référence.
  • Ouvrez le projet dans Android Studio.
  • Créez et exécutez la cible appverifier sur votre appareil Android ou votre émulateur.

Charger les certificats IACA dans le lecteur pour vous assurer que les pièces d'identité acceptées sont authentiques

Pour valider des identifiants réels, vous devez disposer d'une pièce d'identité d'un émetteur accepté dans Wallet. Vous trouverez ci-dessous la liste des émetteurs acceptés par Google Wallet, ainsi que des liens vers leurs certificats pour validation.

Tester votre solution

Pour tester votre solution, compilez et exécutez notre application Android pour titulaire de référence Open Source. Pour compiler et exécuter l'application du titulaire de référence, procédez comme suit:

  • Clonez le dépôt des applications de référence.
  • Ouvrez le projet dans Android Studio.
  • Créez et exécutez la cible appholder sur votre appareil Android ou votre émulateur.

(Facultatif) Enregistrer votre application auprès de Google Wallet

Enregistrez votre application auprès de Google Wallet en remplissant ce formulaire.