Solution 1
@startuml
!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
rectangle "Application cliente" as AppCli {
rectangle "Front Application" as Front #E3F2FD
rectangle "Backend Application" as Backend #E1F5FE
}
rectangle "Authentification" as Authentification {
rectangle "Keycloak\n(OIDC Server)" as Keycloak #E8F5E9
rectangle "Proxy eSanté DevBox" as Proxy DEVBOX_COLOR;text:white
' rectangle "Proxy eSanté DevBox Santé\n(Identity Provider)" as Proxy #FFF3E0
rectangle "Pro Santé Connect\n(PSC)" as PSC PSC_COLOR;text:white
rectangle "Carte CPS / eCPS" as CPS #F3E5F5
skinparam nodesep 20
skinparam ranksep 80
skinparam linetype ortho
skinparam noteBackgroundColor transparent
skinparam noteBorderColor transparent
skinparam noteFontColor black
' --- Liaisons principales ---
Front -[#green]-> Keycloak
note left on link
1- Authentification Keycloak
(Redirect navigateur)
end note
Keycloak -[#blue]-> Proxy
note left on link
2 - Délégation d'authentification PSC
(Redirect navigateur)
end note
Proxy -[#blue]-> PSC
note left on link
3 - Délégation d'authentification PSC
(redirect navigateur)
end note
PSC -[#blue]-> CPS : 4 - Authentification CPS/eCPS
CPS -[#blue,dashed]-> PSC
PSC -[#blue,dashed]-> Proxy
note right on link
5 - Renvoie token PSC
end note
Proxy -[#blue,dashed]-> Keycloak
note right on link
6 - Renvoie token eProxy
end note
Keycloak -[#green,dashed]-> Front
note right on link
7 - Renvoie token Keycloak
end note
@enduml
Configuration de Keycloak
Identity providers
Ajouter un Identity Provider de type OpenID Connect.
- Alias : au choix
- Discovery endpoint : https://{proxy-url}/.well-known/openid-configuration
Keycloak va compléter les urls comme suit :

Pensez à rajouter le Logout URL et modifier l’issuer une fois l’idp enregistré:
- Logout URL : https://{proxy-url}/connect/logout
Pour l’instant nous avons pris le parti de ne faire que proxy pour l’authentification, ainsi le token reçu par keycloak est celui de PSC
Autres paramètres:
- Client authentication : Client secret sent in the request body
- Client ID :
qui doit correspondre à la variable OAUTH2_CLIENT_ID passé au lancement du proxy - Client Secret :
qui doit correspondre à la variable OAUTH2_CLIENT_SECRET passé au lancement du proxy - Pass login_hint : true (variable optionnelle à utiliser pour pré-renseigner l’idNational lors de l’authentification)
- Disable nonce : true (non disponible pour le POC)
Pour l’instant le clientId doit correspondre au AUTH_CLI de votre certificat. Nous n’avons pas reussi à passer le clientId du client keycloak. Il faut donc pour le moment définir un IDP par clientID.
Enregistrer
Puis dans l’onglet Mappers, ajouter psc-session-id :

Clients
Vous pouvez créer un client pour chaque certificat client de l’IGC. Ce client doit être présent dans la configuration du proxy.
La configuration est standard :
- Client ID :
qui doit correspondre à AUTH_CLI de votre certificat: https://pfc.eservices.esante.gouv.fr/pfcng-ihm/authentication.xhtml et devra être enregistré dans le proxy en tant que client autorisé - Authentication flow : Standard flow

La seule spécificité est d’ajouter dans le token généré le proxy_session_id via le client scopes :
- Client scopes -> scope <client_id>-dedicated -> Add Mapper by configuration -> user attributes

Configuration du proxy
Le proxy est packagé avec docker. image: repo.dev.coop/eproxy/eproxy-idp-poc:latest
Un certain nombre de paramètres sont configurables.
Paramètres obligatoires:
- OAUTH2_SERVER_ISSUER : url du serveur IDP utilisé pour .well-known/openid-configuration
- SERVER_PORT
- MONGO_DB_URI (une version ultérieure permettra de tout configurer et logger en file system)
- SPRING_PROFILES_ACTIVE: IDP (possibilité de rajouter SWAGGER)
Exemple
docker run -d --name -p 443:8443 \
-e 'SPRING_PROFILES_ACTIVE=IDP' \
-e 'OAUTH2_SERVER_ISSUER=https://eproxy-test.devbox-sante.fr/' \
-e 'SERVER_PORT=8443' \
-e 'MONGO_DB_URI=mongodb://mongodb:27017/eProxy' \
eproxy repo.dev.coop/eproxy/eproxy-idp-poc:latest
Configuration EDC
La configuration des clients et des routes vers les API de l’espace de confiance seront disponibles via une interface d’administration
Keycloak
L’utilisation du nonce sera mis en place dans la version finale. Le refresh Token via keycloak et l’harmonisation de la durée de vie des sessions est à faire.
Session/RefreshToken
Un travail doit encore être effectué pour synchroniser les différentes sessions