TD0.10 (depuis version 6.0)
Bientôt Disponible
Travaux en cours.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 :