TD0.10 (depuis version 6.0)

Transaction TD0.10 authentification et proxy vers le webDMP

Cette transaction est spécifique à l’authentification indirecte renforcée et offre un accès au DMP par le canal Web-PS sans nécessiter de carte CPx.

Elle est décrite dans le “§5.5 TD0.10 Accès Web-PS Contextuel en mode AIR” du guide d’intégration.

Pour la mise en place de ce mode d’accès :

  • l’authentification de l’utilisateur est laissé à l’intégrateur.
  • la génération du jeton VIHF est réalisée par la DevBox-Santé DMP
  • la génération de la trace est réalisée par la DevBox-Santé DMP
  • le stockage des traces ainsi que leurs extractions sont laissés à l’intégrateur
  • le proxy des requêtes vers le web DMP est réalisé par la DevBox-Santé DMP

Composants

Ainsi le diagramme de composants défini dans le guide d’integration est interprété comme cela dans la DevBox-Santé DMP :

!theme aws-orange
!define DEVBOX_COLOR #278ef5
!define DMP_COLOR #35D9C0
!define MSS_COLOR #DE5D80
!define INS_COLOR #07A2CF
!define CPS_COLOR #D34A3C
!define VITALE_COLOR #5FD67A
!define PSC_COLOR #ff7765
!define APCV_COLOR #c6e66d
!define ANNUAIRE_COLOR #7613e0
!define DATA_COLOR #ffa800

!define DARK_COLOR #0073bb
package "SIH" {
    [Navigateur] as navigateur DARK_COLOR
      [Proxy\n\nDevBox-Santé DMP] as proxy DMP_COLOR
      [Module de génération du VIHF\n\nDevBox-Santé-DMP] as vihf DMP_COLOR
    [Module Métier\n\nIntégrateur] as integrateur
    [Module d'authentification\n\nIntegrateur] as auth
    database "Base des Traces\n\nIntegrateur" as dbTrace
    [Module d'import/export des traces\n\nIntegrateur] as export
    database "Référentiel de sécurité" as dbSec
}

node "Système DMP (Web-PS)" as DMP DARK_COLOR
actor utilisateur DARK_COLOR

utilisateur -right-> navigateur
navigateur -right-> proxy
navigateur -down-> integrateur
integrateur -down-> auth
auth -down-> dbSec
integrateur -right-> vihf
integrateur -> dbTrace
export -up-> dbTrace
proxy -> DMP

Cinématique

La cinématique devient dans la DevBox-Santé

!theme aws-orange
!define DEVBOX_COLOR #278ef5
!define CPS_COLOR #D34A3C
!define VITALE_COLOR #5FD67A
!define DMP_COLOR #35D9C0
!define MSS_COLOR #DE5D80
!define INS_COLOR #07A2CF

!define DARK_COLOR #0073bb
hide footbox

actor "Utilisateur" as utilisateur DARK_COLOR
participant "Navigateur" as navigateur DARK_COLOR
participant "Module métier \n\nintégrateur" as backend
participant "Module d'authentification\n\n intégrateur" as auth
participant "DevBox-Santé DMP" as dbxdmp DMP_COLOR
participant "**DMP**" as dmp DARK_COLOR

utilisateur -> navigateur : Connexion
activate utilisateur
activate navigateur
navigateur -> backend : Connexion
activate backend
backend -> auth : Connexion
activate auth
note over navigateur, auth: Authentification primaire forte de l'utilisateur 
auth --> backend
deactivate auth
backend --> navigateur : utilisateur authentifié
deactivate backend
navigateur --> utilisateur
deactivate navigateur

utilisateur -> navigateur
activate navigateur
navigateur -> backend : Demande d'accès au web-PS 
activate backend
backend -> dbxdmp : POST /dmp/td010JetonVihf
activate dbxdmp
note over dbxdmp : Forge du jeton vihf , génération trace
dbxdmp --> backend : {trace: ..., vihf: ..., url: /AccesIndirecteRenforcee/TableauDeBord}
deactivate dbxdmp
backend --> navigateur : Formulaire XHTML autosoumis
deactivate backend
navigateur -> dbxdmp : Envoi formulaire (SAMLResponse)
activate dbxdmp
dbxdmp -> dmp : envoi formulaire (SAMLResponse)
note over dbxdmp, dmp: Authentification mutuelle
activate dmp
dmp--> dbxdmp : html + jsessionid
deactivate dmp
dbxdmp -> navigateur : html + jsessionid'
deactivate dbxdmp
navigateur --> utilisateur
deactivate navigateur
deactivate utilisateur

== Échanges suivants : la DevBox-Santé DMP joue le rôle de Proxy sur la session ouverte depuis le navigateur ==

alt session dbxdmp et dmp ouverte
  utilisateur -> navigateur 
  activate utilisateur
  activate navigateur 
  navigateur -> dbxdmp : Requête HTTP + jsessionid'
  activate dbxdmp
  dbxdmp -> dmp : Requête HTTP + jsessionid
  activate dmp
  dmp --> dbxdmp : Page HTML
  deactivate dmp
  dbxdmp --> navigateur
  deactivate dbxdmp
  navigateur --> utilisateur
  deactivate navigateur
else session terminé
note across: retour à la génération d'un jeton

deactivate utilisateur
end 

Mise en œuvre

Pour mettre en œuvre cette transaction en tant qu’intégrateur, comme le dit le diagramme de séquence cela se passe donc en trois temps:

1 Authentification

Le module métier intégrateur s’appuie sur une authentification primaire forte de l’utilisateur. La DevBox-santé DMP n’a aucun rôle dans cette séquence.

2 Obtention du jeton VIHF

Il s’agit d’une requête sur le proxy REST DMP :

Exemples Bruno (https://usebruno.com) :


post {
  url: {{baseUrl}}/dmp/td010JetonVihf
  body: json
  auth: none
}

body:json {
  {
   "context": {
    "author" : {
      "rpps" : "899700433156",
      "nom" : "MEDECIN RPPS0043315",
      "prenom" : "VIRGINIE",
      "role" : "10",
      "specialite" : "G15_10/SM26",
      "secteurActivite" : "SA07",
      "service" : {
        "nom" : "Service pédiatrie"
      }
    },
    "authentificationIndirecteRenforcee" : true,
    "samlAuthnContext" : "urn:oasis:names:tc:SAML:2.0:ac:classes:Password"
  }, 
  "request" : {
    "matriculeINS" : {
      "valeur" : "133061764035249",
      "identifiantSysteme" : "1.2.250.1.213.1.4.10"
    }
  }}
}

L’exemple complet : https://bitbucket.org/devbox-sante/dbx-examples-bruno/src/master/dbx-dmp-6.x/authentification/p12/TD0.10%20-%20AIR%E2%80%AF-%20contexte%20WebPS.bru

La réponse va ressembler à cela :

{
  "trace": {
    "vihfId": "5f5bca57-49f1-429c-82c4-970b4097eddd",
    "dateTime": "2024-06-04T08:04:57.98Z",
    "idNatStruct": "11B0062640",
    "idNatPs": "899700433156",
    "statut": "SUCCES",
    "transactionId": "TD0.10",
    "samlAuthContext": "urn:oasis:names:tc:SAML:2.0:ac:classes:Password"
  },
  "vihf": "PHNhbWwycDpS....NlPg==",
  "url": "/AccesIndirectRenforce/TableauDeBord/133061764035249/1.2.250.1.213.1.4.10"
}

Vous obtenez l’information de trace pour la génération du jeton, pour stocker dans votre gestionnaire de traces fonctionnelles. Mais surtout l’url (relative) vers le proxy web Devbox-Santé DMP et enfin le vihf encodé en base64.

3 Connexion au WebDMP via le proxy DevBox-Santé DMP

Ce jeton VIHF encod peut être retourné dans un formulaire html comme décrit dans le guide d’intégration (§5.5.2.2) ayant pour code :

<body onload="document.forms[0].submit()">
<form method="post" action="/AccesIndirectRenforce/TableauDeBord/133061764035249/1.2.250.1.213.1.4.10">
<input type="hidden" name="SAMLResponse" value= "PHNhbWwycDpS....NlPg==" />
...
</form>
</body>

Vous pouvez également tester depuis un navigateur avec le formulaire fourni /td010Form.html. Il vous faudra copier/coller (rapidement) le jeton dans la textArea :

td010Form