# ModĂšles de transaction - Liaison

API Tiers de Mojaloop

# Table des MatiĂšres

  1. Préface
    1.1 Conventions utilisées dans ce document
    1.2 Informations sur la version du document
    1.3 Références
  2. Introduction
    2.1 Spécification de l'API Tiers
  3. Liaison
    3.1 Pré-liaison
    3.2 Découverte
    3.3 Demande de consentement
    3.4 Authentification
    3.5 Octroi du consentement
    3.6 Enregistrement du justificatif
  4. Déliaison
    4.1 Déliaison sans service d'authentification hébergé par le Switch
    4.2 Déliaison avec service d'authentification hébergé par le Switch
  5. Scénarios d'Erreur
    5.1 Découverte
    5.2 Erreurs sur les demandes de consentement
    5.3 Authentification
    5.4 Octroi du consentement

# 1. Préface

Cette section contient des informations sur la façon d'utiliser ce document.

# 1.1. Conventions utilisées dans ce document

Les conventions suivantes sont utilisées dans ce document pour identifier les informations spécifiées.

Type d'information Convention Exemple
ÉlĂ©ments de l'API, tels que les ressources Gras /authorization
Variables Italique entre chevrons {ID}
Termes du glossaire Italique à la premiÚre occurrence ; défini dans Glossaire Le but de l'API est de permettre des transactions financiÚres interopérables entre un Payeur (une personne qui paie dans une transaction) localisé dans un FSP (une entité qui fournit un service financier numérique à un utilisateur final) et un Bénéficiaire (une personne qui reçoit des fonds) localisé dans un autre FSP.
Documents de rĂ©fĂ©rence Italique Les informations sur l'utilisateur ne doivent gĂ©nĂ©ralement pas ĂȘtre utilisĂ©es par les dĂ©ploiements de l'API ; les mesures de sĂ©curitĂ© dĂ©taillĂ©es dans Signature API et Chiffrement API doivent ĂȘtre utilisĂ©es Ă  la place.

# 1.2. Informations sur la version du document

Version Date Description des modifications
1.0 2021-10-03 Version initiale

# 1.3. Références

Les références suivantes sont utilisées dans cette spécification :

Référence Description Version Lien
Réf. 1 API Ouvert pour l'Interopérabilité FSP 1.1 Définition de l'API v1.1 (opens new window)

# 2. Introduction

Ce document prĂ©sente les modĂšles de transaction supportĂ©s par l’API Tiers relatifs Ă  l’établissement d’une relation entre un Utilisateur, un DFSP et un PISP.

Le style architectural et la conception de cette API sont basés sur la Section 3 (opens new window) de la Réf. 1 ci-dessus.

# 2.1 Spécification de l'API Tiers

La spécification de l'API Tiers Mojaloop inclut les documents suivants :

# 3. Liaison

L'objectif du processus de liaison est d'expliquer comment les utilisateurs établissent la confiance entre les trois parties intéressées :

  1. Utilisateur
  2. DFSP oĂč l'utilisateur dĂ©tient un compte
  3. PISP sur lequel l'utilisateur veut compter pour initier les paiements

La liaison est divisée en plusieurs phases distinctes :

  1. Pré-liaison
    Dans cette phase, un PISP demande quels DFSP sont disponibles pour ĂȘtre liĂ©s.
  2. Demande de consentement
    Dans cette phase, un PISP tente d’établir la confiance entre les 3 parties.
  3. Authentification
    Dans cette phase, l'utilisateur prouve son identité à son DFSP.
  4. Octroi du consentement
    Dans cette phase, un PISP prouve au DFSP que l'utilisateur et le PISP ont établi la confiance, et ainsi, le DFSP confirme que la confiance mutuelle existe entre les 3 parties.
  5. Enregistrement du justificatif
    Dans cette phase, un utilisateur crée le justificatif qu'il utilisera pour consentir à des transferts futurs du DFSP initiés par le PISP.

# 3.1 Pré-liaison

Dans cette phase, un serveur PISP doit connaĂźtre les DFSP disponibles pour ĂȘtre liĂ©s. Ceci est peu probable d’ĂȘtre fait Ă  la demande (par exemple, quand un utilisateur clique sur "lier" dans l’application mobile du PISP), et plus probablement rĂ©alisĂ© pĂ©riodiquement et mis en cache par le serveur PISP. La raison est que de nouveaux DFSP ne rejoignent gĂ©nĂ©ralement pas le rĂ©seau Mojaloop trĂšs frĂ©quemment, donc appeler ceci plusieurs fois dans la mĂȘme journĂ©e donnerait probablement les mĂȘmes rĂ©sultats. Nous recommandons que le PISP fasse cette requĂȘte une fois par jour pour maintenir la liste des DFSPs Ă  jour.

L'objectif final de cette phase est que le serveur PISP dispose d'une liste finale de DFSPs disponibles ainsi que de toutes les métadonnées utiles nécessaires pour débuter le processus de liaison.

Le PISP peut afficher cette liste de DFSPs à l'utilisateur, et l'utilisateur peut sélectionner le DFSP avec lequel il détient un compte à lier.

Pré-liaison

# 3.2 Découverte

Dans cette phase, on demande Ă  l'utilisateur de sĂ©lectionner le type et la valeur de l'identifiant qu'il utilise avec le DFSP avec lequel il souhaite se lier. Cela peut ĂȘtre un nom d'utilisateur, un MSISDN (numĂ©ro de tĂ©lĂ©phone), ou une adresse e-mail.

Le résultat de cette phase est une liste de comptes potentiels disponibles pour la liaison. L'utilisateur choisira ensuite un ou plusieurs de ces comptes sources et le PISP les fournira au DFSP lors de la demande de consentement.

Le DFSP PEUT renvoyer un « accountNickname » au PISP dans la liste des comptes. Cette liste sera affichĂ©e Ă  l'utilisateur dans l’application PISP pour qu’il sĂ©lectionne quels comptes il souhaite lier. Un DFSP pourrait masquer une partie du surnom selon ses exigences pour afficher les informations sur le compte sans authentifier l’utilisateur.

REMARQUE : Lors de l’utilisation du canal d’authentification Web, il est possible que les choix faits (c’est Ă  dire, les comptes Ă  lier) soient remplacĂ©s par l'utilisateur dans une vue web. L’utilisateur peut donc dĂ©cider, pendant la phase d’Authentification, de lier un compte diffĂ©rent de celui d’origine. Cela est parfaitement acceptable et doit ĂȘtre attendu de temps Ă  autre.

Découverte

# 3.3 Demande de consentement

Dans cette phase, un PISP demande Ă  un DFSP spĂ©cifique de dĂ©marrer le processus d’établissement du consentement entre trois parties :

  1. Le PISP
  2. Le DFSP spécifié
  3. Un utilisateur présumé client du DFSP ci-dessus

La demande de consentement du PISP doit inclure plusieurs éléments importants :

  • Les canaux d’authentification acceptables pour l’utilisateur
  • Les Ă©tendues nĂ©cessaires dans le cadre du consentement (ici, presque toujours, seulement la possibilitĂ© de voir le solde d’un compte spĂ©cifique et d’envoyer des fonds depuis un compte).

Certaines informations dĂ©pendent du canal d’authentification utilisĂ© (Web ou OTP). Si le canal Web est utilisĂ©, les informations supplĂ©mentaires suivantes sont requises :

  • Un URI de rappel vers lequel l’utilisateur peut ĂȘtre redirigĂ© avec toute information supplĂ©mentaire.

Le rĂ©sultat de cette phase dĂ©pend du canal d’authentification utilisé :

# 3.3.1 Web

Dans le canal d’authentification Web, le rĂ©sultat est que le PISP reçoit une URL spĂ©cifique oĂč cet utilisateur devrait ĂȘtre redirigĂ©. Cette URL doit ĂȘtre un endroit oĂč l’utilisateur peut prouver son identitĂ© (par exemple, via une connexion classique).

Demande de consentement

# 3.3.2 OTP / SMS

Dans le canal d’authentification OTP, le DFSP envoie un message OTP « hors bande » Ă  son utilisateur (par exemple, par SMS ou e-mail). Le PISP demande Ă  l'utilisateur ce code OTP, et l'inclut dans le champ « authToken » lors du rappel PATCH /consentRequests/{ID}.

Demande de consentement

# 3.4 Authentification

Dans la phase d’authentification, il est attendu de l’utilisateur qu’il prouve son identitĂ© auprĂšs du DFSP. Une fois cela fait, le DFSP fournira Ă  l’utilisateur un certain type de secret (par exemple, un OTP ou un token d’accĂšs). Ce secret sera alors transmis au PISP afin que celui-ci puisse dĂ©montrer une chaĂźne de confiance :

  • Le DFSP fait confiance Ă  l'utilisateur
  • Le DFSP donne un secret Ă  l'utilisateur
  • L'utilisateur fait confiance au PISP
  • L'utilisateur transmet le secret reçu du DFSP au PISP
  • Le PISP donne le secret au DFSP
  • Le DFSP vĂ©rifie que le secret est correct

Cette chaüne aboutit à la conclusion suivante : le DFSP peut faire confiance au PISP pour agir pour le compte de l’utilisateur, et une confiance mutuelle existe entre les trois parties.

Le processus d’établissement de cette chaĂźne de confiance dĂ©pend du canal d’authentification utilisĂ© :

# 3.4.1 Web

Dans le canal Web, le PISP utilise le champ authUri renvoyĂ© lors du rappel PUT /consentRequests/{ID} pour rediriger l’utilisateur vers le site web du DFSP oĂč il pourra prouver son identitĂ© (probablement via un identifiant et mot de passe classique).

Remarque: Notez qu’à ce stade, l’utilisateur peut modifier ses choix de comptes Ă  lier. Le rĂ©sultat sera visible plus tard lors de la phase d'octroi du consentement, dans laquelle le DFSP fournira les bonnes valeurs au PISP dans le champ scopes.

Authentification (Web)

# 3.4.2 OTP

Lors de l’utilisation du canal OTP, le DFSP enverra Ă  l’utilisateur un mot de passe Ă  usage unique via un canal préétabli (comme un SMS). Le PISP doit alors demander Ă  l’utilisateur ce mot de passe Ă  usage unique et le renvoyer au DFSP via l’appel API PATCH /consentRequests/{ID}.

Authentification (OTP)

# 3.5 Octroi du consentement

Maintenant que la confiance mutuelle a Ă©tĂ© Ă©tablie entre les trois parties, le DFSP est capable de crĂ©er un enregistrement de ce fait en crĂ©ant une nouvelle ressource Consent. Cette ressource enregistrera toutes les informations pertinentes sur la relation entre les trois parties, et contiendra Ă©ventuellement des informations supplĂ©mentaires sur la maniĂšre dont l’utilisateur pourra prouver son consentement pour chaque transfert futur.

Cette phase consiste exclusivement Ă  ce que le DFSP demande Ă  ce qu’un nouveau consentement soit créé.

Octroi du consentement

# 3.6 Enregistrement du justificatif

Une fois la ressource de consentement créée, le PISP tentera d’établir avec le DFSP le justificatif qui devra ĂȘtre utilisĂ© pour vĂ©rifier que l'utilisateur donne son consentement pour chaque transfert futur.

Cela se fera en stockant un justificatif FIDO (par exemple, une clĂ© publique) sur le service Auth Ă  l'intĂ©rieur de la ressource de consentement. Lors des futurs transferts, il sera demandĂ© que ces transferts soient signĂ©s numĂ©riquement par le credential FIDO (ici la clĂ© privĂ©e) pour ĂȘtre considĂ©rĂ©s comme valides.

Cet enregistrement du justificatif est composé de trois phases : (1) dériver le challenge, (2) enregistrer le justificatif, et (3) finaliser le consentement.

# 3.6.1 Dérivation du challenge

Le PISP doit dĂ©river le challenge qui sera utilisĂ© comme entrĂ©e dans l’étape d'enregistrement de clĂ© FIDO. Ce challenge ne doit pas pouvoir ĂȘtre devinĂ© Ă  l’avance par le PISP.

  1. Soit consentId la valeur de body.consentId dans la requĂȘte POST /consents

  2. Soit scopes la valeur de body.scopes dans la requĂȘte POST /consents

  3. Le PISP doit construire l'objet JSON rawChallenge

{
   "consentId": <body.consentId>,
   "scopes": <body.scopes>
}
  1. Ensuite, le PISP doit convertir cet objet JSON en une chaĂźne au format Canonical JSON RFC-8785 (RFC-8785 Canonical JSON format (opens new window))

  2. Enfin, le PISP doit calculer un hash SHA-256 de la chaßne JSON canonique, c'est-à-dire : SHA256(CJSON(rawChallenge))

La sortie de cet algorithme, challenge, sera utilisée comme défi lors du flux d'enregistrement FIDO (opens new window)

# 3.6.2 Enregistrement du justificatif

Une fois le challenge dérivé, le PISP générera un nouveau justificatif sur le dispositif, signera numériquement le challenge, et fournira des informations supplémentaires sur le justificatif dans la ressource Consent :

  1. L’objet PublicKeyCredential — qui contient l’ID de la clĂ© et une AuthenticatorAttestationResponse (opens new window) contenant la clĂ© publique
  2. Un champ credentialType Ă  la valeur FIDO
  3. Un champ status avec la valeur PENDING

Remarque : Objets Credential génériques
Bien que nous soyons concentrĂ©s d’abord sur FIDO, il est possible que certains PISP souhaitent offrir des services aux utilisateurs via d’autres canaux, par ex. USSD ou SMS. L’API prend donc aussi en charge un type GENERIC, par exemple :

CredentialTypeGeneric {
  credentialType: 'GENERIC'
  status: 'PENDING',
  payload: {
    publicKey: base64(...),
    signature: base64(...),
  }
}

Le DFSP reçoit l’appel PUT /consents/{ID} du PISP, et valide Ă©ventuellement l'objet Credential inclus dans la requĂȘte. Le DFSP demande ensuite au service Auth de crĂ©er l’objet Consent et de valider le justificatif.

Si le DFSP reçoit un rappel PUT /consents/{ID} du service Auth, avec un credential.status à VERIFIED, il sait que le justificatif est valide selon le service Auth.

Sinon, s’il reçoit un rappel PUT /consents/{ID}/error, il sait que quelque chose a mal tournĂ© lors de l’enregistrement du consentement et du justificatif associĂ©, et peut informer le PISP en consĂ©quence.

Le service Auth est ensuite responsable d'appeler POST /participants/CONSENTS/{ID}. Cet appel associera le consentId au participantId du service Auth et permettra de retrouver plus tard le service Auth correspondant.

Enregistrement du justificatif : Enregistrement

# 3.6.3 Finalisation du consentement

Une fois que le DFSP est sûr que le justificatif est valide, il appelle POST /participants/THIRD_PARTY_LINK/{ID} pour chaque compte dans la liste Consent.scopes. Cette entrée représente le lien entre le compte du PISP et celui du DFSP, que le PISP pourra utiliser pour spécifier la source des fonds lors de la demande de transaction.

Enfin, le DFSP appelle PUT /consent/{ID} avec l'objet Consent finalisé reçu du service Auth.

Enregistrement du justificatif : Finalisation

# 4. Déliaison

À un moment donnĂ©, il est possible qu’un utilisateur, un PISP ou un DFSP dĂ©cide que la relation de confiance prĂ©cĂ©demment Ă©tablie ne doit plus exister. Par exemple, un scĂ©nario courant peut ĂȘtre la perte du tĂ©lĂ©phone par un utilisateur, qui utilise l’interface du DFSP pour supprimer le lien entre le dispositif perdu, le PISP et le DFSP.

Pour rendre cela possible, il suffit de fournir un moyen à un membre du réseau de supprimer la ressource de consentement et de notifier les autres parties de cette suppression.

Nous devons gĂ©rer 2 scĂ©narios avec une requĂȘte DELETE /consents/{ID} :

  1. Un service Auth hĂ©bergĂ© par le DFSP, oĂč aucun dĂ©tail du consentement n’est stockĂ© dans le Switch ;
  2. Un service Auth hĂ©bergĂ© par le Switch, oĂč ce service est considĂ©rĂ© comme la source faisant autoritĂ© pour l’objet Consent.

# 4.1 Déliaison sans service d'authentification hébergé par le Switch

Dans ce cas, le Switch transmet la requĂȘte DELETE /consents/22222222-0000-0000-0000-000000000000 au DFSP dans l’en-tĂȘte FSPIOP-Destination.

DĂ©liaison — DFSP hĂ©bergĂ©

Dans le cas oĂč la dĂ©liaison est demandĂ©e depuis le cĂŽtĂ© DFSP, celui-ci peut simplement appeler PATCH /consents/22222222-0000-0000-0000-000000000000 pour informer le PISP d’une mise Ă  jour sur l’objet Consent.

# 4.2 Déliaison avec service d'authentification hébergé par le Switch

Dans cette instance, le PISP adresse toujours son appel DELETE /consents/22222222-0000-0000-0000-000000000000 au DFSP via l’en-tĂȘte FSPIOP-Destination.

En interne, le Switch recherchera la source faisant autoritĂ© de l’objet Consent via l’appel ALS, GET /participants/CONSENT/{ID}. S’il est dĂ©terminĂ© qu’un service Auth hĂ©bergĂ© par le Switch « possĂšde » ce consentement, l’appel HTTP DELETE /consents/{ID} sera redirigĂ© vers le service Auth.

DĂ©liaison — Switch hĂ©bergĂ©

# 5.ScĂ©narios d’erreur

# 5.1 Découverte

Quand le DFSP ne trouve pas d'utilisateur pour l'identifiant dans GET /accounts/{ID}, le DFSP rĂ©pond avec le code d’erreur 6205 via PUT /accounts/{ID}/error.

Erreur — Comptes

# 5.2 Erreurs sur les demandes de consentement

Lorsque le DFSP reçoit la requĂȘte POST /consentRequests du PISP, les erreurs suivantes peuvent survenir :

  1. Le DFSP ne prend pas en charge les étendues (scopes) spécifiées : 6101. Par exemple, le userId spécifié ne correspond pas aux comptes mentionnés, ou le champ scope.actions contient des permissions que ce DFSP ne prend pas en charge.
  2. Le PISP a envoyĂ© un mauvais callbackUri : 6204. Par exemple, le schĂ©ma de callbackUri pourrait ĂȘtre http, ce que le DFSP pourrait choisir de ne pas accepter.
  3. Tout autre contrĂŽle ou validation cĂŽtĂ© DFSP Ă©choue : 6104. Par exemple, le compte de l’utilisateur pourrait ĂȘtre inactif ou suspendu.

Dans ce cas, le DFSP doit informer le PISP de l’échec en envoyant un rappel PUT /consentRequests/{ID}/error au PISP.

Erreur — consentRequests

# 5.3 Authentification

Lorsqu'un PISP envoie un PATCH /consentRequests/{ID} au DFSP, il est possible que le authToken soit expiré ou invalide :

Authentification — OTP invalide