Solution 1

Proxy en tant que Identity Provider (IDP) pour Keycloak

@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 : keycloak_idp.png

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 : keycloak_idp_mapper.png

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 :

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 keycloak_client_scope.png

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