Services EDC / MsSanté

Services de l’Espace de confiance et la MsSanté

Proxy <-> Keycloak <-> Platine

Afin de tester le proxy 2 routes ont été configurées (par la suite ces routes seront configurables via une interface)

  • backend-insi: /send/insi/{endpoint}
  • backend-mockApiPsc: /send/apipsc/{endpoint}

Le backend INSI est un service pour l’instant mocké tant que nous n’avons pas accès à l’environnement de test

Le mockApiPsc est un service de test accessible via les tests platines, l’url de ce dernier change à chaque lancement de la VM sur platine. Vous devez lancer le test Mock Service et récupérer son url. Il faut donc relancer le docker avec la nouvelle url à chaque fois:

  • BACKEND_MOCK_API

Attention le certificat p12 utilisé pour lancer le Mock Service doit correspondre au certificat du client que vous utilisez. L’IP configuré doit aussi correspondre à celle du proxy.

platine_application.png

platine_test_mockService.png

Pour les clients type LGC, le proxy est configuré pour le POC par défaut avec 2 clients ans-odc-lps1-edc-bas et ans-odc-lps2-edc-bas (par la suite ces clients seront configurables via une interface) Ces 2 clients ont besoin d’un certificat p12 et d’un secret

  • PSC_CLIENT_LPS1_SECRET
  • PSC_CLIENT_LPS1_CERT
  • PSC_CLIENT_LPS2_SECRET
  • PSC_CLIENT_LPS2_CERT Il faut monter un volume afin d’accéder à ces certificats sur le file system.

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' \
-e 'BACKEND_MOCK_API=https://9055c231-6447-4691-8eab-89588651b9ab.mockservice.platines.esante.gouv.fr' \
-v /opt/certificat:/certificat
-e 'PSC_CLIENT_LPS1_SECRET=secret' \
-e 'PSC_CLIENT_LPS1_CERT=/certificat/lps1.p12' \
-e 'PSC_CLIENT_LPS2_SECRET=secret' \
-e 'PSC_CLIENT_LPS2_CERT=/certificat/lps2.p12' \
eproxy repo.dev.coop/eproxy/eproxy-idp-poc:latest         

https

Le proxy peut être configuré en SSL

  • SSl_ENABLED: true/false (par défaut false)
  • KEYSTORE_CERTIFICAT_PATH
  • KEYSTORE_KEY_PATH
  • SERVER_DOMAIN pour la génération du certificat autosigné ou via let’s encrypt

Exemple en partageant un volume:

-e 'SSl_ENABLED=true' -v /etc/ssl/eproxy-test:/etc/ssl/eproxy-test -e 'KEYSTORE_KEY_PATH=/etc/ssl/eproxy-test/privkey.pem' -e 'KEYSTORE_CERTIFICAT_PATH=/etc/ssl/eproxy-test/fullchain.crt' -e 'SERVER_DOMAIN=eproxy-test.devbox-sante.fr'

Si les certificats ne sont pas présents, le proxy génère des certificats auto-signés.

Si votre fournisseur de nom de domaine est compatible avec ACME, il est également possible de générer les certificats avec Let’s Encrypt en ajoutant aux précédents paramètres la configuration acme:

-e 'SPRING_PROFILES_ACTIVE=IDP,letsEncrypt' -e 'GANDI_KEY=$GANDI_KEY'

Backend LGC <-> Proxy

Token exchange

Afin d’obtenir le token de PSC pour notamment la MSS, le proxy dispose du service suivant:

GET /token
Host: mon-proxy.com
Authorisation: Bearer Keycloak token

Réponse:

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "id_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Si le token est expiré, le service effectue automatiquement le refresh afin d’envoyer la réponse

Appel service Espace de confiance

Les services de l’EDC sont définis dans la configuration

Exemple:

- id: backend-mockApiPsc
    uri: ${BACKEND_MOCK_API:https://9055c231-6447-4691-8eab-89588651b9ab.mockservice.platines.esante.gouv.fr}
    predicates:
    - Path=/send/apipsc/{endpoint}
    filters:
    - SetPath=/mockservice/apipsc/{endpoint}

Ainsi pour appeler ce service, il faut utiliser le path défini:

POST/GET /send/apipsc/{endpoint}
Host: mon-proxy.com
Authorisation: Bearer Keycloak token

ce qui aura pour effet d’appeler:

https://9055c231-6447-4691-8eab-89588651b9ab.mockservice.platines.esante.gouv.fr/mockservice/apipsc/{endpoint}

avec le token obtenu par le proxy à partir du token PSC.

Scalabilité / Redis

Afin de pouvoir déployer plusieurs proxy, la session du proxy doit pouvoir être partagé entre les différentes instances. Redis a été mis en place pour partager les sessions.

Pour activer redis:

  • SPRING_PROFILES_ACTIVE: redis
  • REDIS_HOST: localhost par défaut
  • REDIS_PORT: 6379 par défaut

Exemple :

-e 'SPRING_PROFILES_ACTIVE=IDP,redis' -e 'REDIS_HOST=localhost' -e 'REDIS_PORT=6379'