Sécurisation de la couche transport API REST Pro Santé Connectée
1.2.0 - ci-build France flag

This page is part of the Sécurisation de la couche transport API REST (v1.2.0: Release) based on FHIR (HL7® FHIR® Standard) R4. This is the current published version. For a full list of available versions, see the Directory of published versions

Appel d'une API ProSantéConnectée avec des données métiers complémentaires

Certains services cibles Pro Santé Connectés nécessitent l’envoi de données métiers complémentaires concernant le LPS, le proxy API ou l’activité du PS.

  • Des services existants historiques assurent ce besoin grâce à une assertion SAML appelée VIHF et souhaitent minimiser l’impact de l’intégration du protocole OAuth 2.0.
  • Pour les autres services souhaitant répondre à ce besoin, ils devront à terme utiliser le paramètre actor_token spécifié dans le protocole OAuth 2.0.

Services cibles existants utilisant une assertion SAML

Pour les services historiques utilisant l’assertion SAML et qui voudraient minimiser les impacts côté client éditeurs, il est possible de créer une architecture de transition qui utlise l’assertion SAML pour transmette les données métier.

  • Le schéma ci-dessous présente l’intégration du requêtage par protocole SOAP dans un flux OAuth 2.0
  • Les flux 13 et 14 représentent l’accès à l’API avec la requête SOAP et l’assertion SAML. Le Client lourd LPS crée et peuple l’assertion SAML et génère la requête SOAP. Il est préconisé d’utiliser une connexion mTLS lors du flux 14.

Pour plus précisions pour plus de précisions concernant le flux 13 se référer au document CI-SIS volet transport synchrone Client Lourd et au document CI AMO volet transport synchrone pour les services de l’Assurance Maladie [1].

  • Le flux 17 représente l’accès au service cible avec la requête SOAP et l’assertion SAML avec l’access_token de l’API passé à l’en-tête Authorization : Bearer de la requête.
Systeme appelant / initiateurSysteme cibleClient Lourd PSClient Lourd PSProxy LPS APIProxy LPS APIProxy LPS FSProxy LPS FSDevice d'authentification PSDevice d'authentification PSProSanteConnectProSanteConnectServeur d'autorisationServeur d'autorisationService cibleService cible1 : initialisation2 : partage du jeton applicatif3 : acces initialAuthentification CIBA4 : redirect4a: authentification reconnue5 : demande d'authentification de l'utilisateur6 : transmission du resultat de l'authentification7a : interrogation du statut du jeton7b : reponse sur le statut7c : interrogation du statut du jeton7d : reponse sur le statut8 : ID Token + Access Token + Refresh Token (PSC)userinfo - OPTIONNEL9. subject_token10. userinfo (PSC)11. OK/KO + userinfo12 : Tokens PSCOAUTH2.0 flow13 : acces API + requete SOAP + SAML14 : subject_token(parametre) + scope(parametre)15 : subject_token (introspection)OKControle d'acces (Client ID_AS x scopes)16. access_token17 : access_token + acces aux donnees

Nouveaux Services cibles (ce paragraphe est en cours de rédaction)

L’ajout du paramètre actor_token [12] dans la requête token exchange permet de transmettre au serveur d’autorisation du service cible des données métiers complémentaires.

L’actor_token_type doit alors y être spécifié conjointement.

Certains services cibles historiques ont besoin des données suivantes :

  • données identifiantes du LPS (lps_nom, lps_id, lps_version…),
  • Situation d’exercice choisie par le PS sur son LPS.

Paramètres

Obligatoire d’après la documentation officielle (OAuth 2.0)

obligatoire pour le service cible

Valeur

grant_type

Oui

Oui

urn:ietf:params:oauth:grant-type:token-exchange

subject_token

Oui

Oui

Access Token PSC

subject_token_type

Oui

Oui

urn:ietf:params:oauth:token-type:jwt

actor_token

Non

Non

JWT identifiant :

Ø Proxy LPS API

Ø Le LPS

Ø L’activité du PS

actor_token_type

Non

Non

urn:ietf:params:oauth:token-type:jwt
ou bien
urn:ietf:params:oauth:token-type:access_token

scope

Non

Oui

A déterminer par les équipes métiers

= scopes metier

Exemple de claims du JWT décodé correspondant à l’actor_token

  {
    "iss":"https://original-issuer.example.net",
    "exp": 1441910060,
    "sub": admin@example.net,
     "lps_nom": <lps_nom>,
     "lps_id": <lps_id>,
     "lps_version": <lps_version>,
     "situation_exercice”: <situation_exercice >
  }
  • Selon les nécessités du service cible, l’access_token délivré peut être enrichi avec les claims de l’actor_token fournis lors de la requête.

  • Le JWT actor_token dans le cas d’une API Pro Santé Connectée pourrait signé par la clé privée du certificat cachet serveur de la structure porteuse du fournisseur de services.
    Cependant, le cas mTLS couvre ce besoin rendant la signature non nécessaire.

Systeme appelant / initiateurSysteme cibleClient LourdClient LourdProxy LPS APIProxy LPS APIProSanteConnectProSanteConnectServeur d'autorisationServeur d'autorisationService cibleService cible1 : initialisation2 : partage du jeton applicatif3. acces initial4. redirectAuthentification Pro Sante Connect5. client_id, scope "all" PSC6. authentification user (CPS/eCPS)7. authorization code PSC8. authorization code PSC8. authorization code PSC +Client ID_FS/secret9. ID Token + AT + Refresh Token (PSC)userinfo - OPTIONNEL10. subject_token11. userinfo (PSC)12. OK/KO + userinfoOAUTH2.0 flow13 . acces API + jeton applicatif14. subject_token(parametre) + actor_token (parametre) + scope(parametre)15. subject_token (introspection)OKControle d'acces (Client ID_AS x scopes)16. access_token17. access_token + acces aux donnees