Giter Club home page Giter Club logo

keycloak-prosanteconnect's Introduction

Keycloak-prosanteconnect

Cette extension pour Keycloak ajoute un fournisseur d'identité permettant d'utiliser les services proposés par Pro Santé Connect.

Ce connecteur Keycloack fourni par l’ANS a pour vocation de simplifier l’intégration de Pro Santé Connect, mais n’affranchit pas le service utilisateur du bon respect du référentiel d’exigences que vous pouvez retrouver ici : https://industriels.esante.gouv.fr/produits-services/pro-sante-connect/referentiel-psc.

Fonctionnalités

  • Vérification de signature (basée sur le client-secret)
  • Gestion du niveau d'authentification (eIDAS1) dans la demande d'autorisation
  • Thèmes de connexion permettant l'affichage du bouton Pro Santé Connect (psc-theme)
  • Meilleure gestion du logout (contourne https://issues.jboss.org/browse/KEYCLOAK-7209)

Compatibilité

  • La version 1.0.0 est compatible avec Keycloak 18.0.X.
  • La version 2.0.X est compatible avec Keycloak 21.0.X.
  • La version 3.0.X est compatible avec Keycloak 22.0.X.
  • La version 4.0.X est compatible avec Keycloak 23.0.X et supérieur.

Installation

  • Sur la machine Keycloak, déposer le jar dans le répertoire /providers
  • Si le serveur Keycloak était déjà démarré, l’arrêter.
  • Pour prendre en compte le nouveau connecteur, effectuer la commande suivante : /bin/kc.sh build
  • Démarrer le serveur Keycloak: /bin/kc.sh start

Utilisation

Prérequis

Vous devez créer un compte Pro Santé Connect depuis le Portail Industriel afin d’obtenir les informations nécessaires à la configuration de cette extension (clientId, clientSecret, URIs de redirection et de logout).

Il existe 2 environnements de connexion, Bac à sable et Production. La demande d'un compte permettant l'accès à n'importe quel des environnements s'effectue par email au service support de Pro Santé Connect.

Paramétrage du connecteur

Se connecter à la console d’administration.

La connexion à Pro Santé Connect pourra être définie comme suit – dans l’onglet « Identity Providers », sélectionner « Add Provider » et choisir « Pro Sante Connect » dans la liste déroulante.

keycloak_add_provider_1

Dans l’écran ci-dessous, il est nécessaire de remplir le client id et client secret de ce serveur keycloak tels qu’enregistrés chez Pro Sante Connect. Il est nécessaire d’enregistrer deux Redirect URIs chez Pro Sante Connect. Dans notre exemple :

keycloak_provider_1

Des champs supplémentaires sont disponibles une fois le provider créé : keycloak_provider_2

A noter que l'environnement Pro Santé Connect par défaut est celui de production. Pour pouvoir utiliser l'environnement bac à sable, il est nécessaire de valoriser la variable d'environnement suivante : PROSANTECONNECT_BACASABLE=1

Définition d'une application cliente

Déclarer l’application cliente auprès du serveur keycloak comme suit :

keycloak_client_1

Le Client ID doit correspondre à celui défini dans la configuration de l’application cliente, par exemple au niveau de la directive suivante :
OIDCClientID tryecps

keycloak_client_2

Il est ensuite possible d'activer l'authentification, comme suit : keycloak_client_3

Il est obligatoire de déclarer les redirect URIs exactement comme définis au niveau de l’application cliente, comme au niveau de la directive suivante (dans cet exemple, le wildcard * est utilisable) :
OIDCRedirectURI https://tryecps.henix.asipsante.fr/oidc/redirect

keycloak_client_4

Le secret généré ici par Keycloak doit être renseigné auprès de l’application cliente, par exemple au niveau de la directive suivante :
OIDCClientSecret zjYDwYCqtSjseVHTGdLBi4FLiTWXogsQ

keycloak_client_5

Thème

Cette extension fournit un thème : psc

Il y a deux moyens de définir le thème :

  • Au niveau du serveur Keycloak: keycloak_theme_1

  • Au niveau de l'application cliente: keycloak_theme_2

La page de login de Keycloak ressemblera alors à ça: keycloak_theme_login

Développement

Build FAQ

Que faire si le build échoue avec le message ' Some files do not have the expected license header.' ?

  1. Exécuter la commande maven suivante : mvnw initialize license:format

  2. Vérifier les modifications et committer

Pourquoi le build échoue-t'il pour en-têtes non-conforme sans modification des sources ?

Le time-span des copyright est calculé automatiquement. Par conséquent, au premier build de l'année une moise à jour des en-têtes est demandée.

keycloak-prosanteconnect's People

Contributors

cpanissod avatar edegenetais-nx avatar mjui avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

ljoubert fliot

keycloak-prosanteconnect's Issues

Error when using PSC theme

Keycloak 22.0.5
Provider PSC 3.0.0

Error HTTP 500
keycloak-1 | 2023-11-22 09:21:12,015 ERROR [org.keycloak.forms.login.freemarker.FreeMarkerLoginFormsProvider] (executor-thread-4) Failed to process template: org.keycloak.theme.FreeMarkerException: Failed to process template login.ftl
keycloak-health-checks-keycloak-1 | at org.keycloak.theme.freemarker.DefaultFreeMarkerProvider.processTemplate(DefaultFreeMarkerProvider.java:52)

Thèmes PSC : Bouton avec logo PSC non centré

Malgré la résolution de l'issue 20, le logo n'est toujours pas centré. Par ailleurs, je suggère de supprimer le bord du bouton qui est proposé par défaut par le thème Keycloak.
Ci-après mes suggestions de modifications de psc.css (lignes 454 à 467) :

a#social-psc {
    background: url(../img/ProSanteConnect_BLEU.png) no-repeat center center;
    background-size: 224px 100%;
    height: 56px;
}

a#social-psc:hover {
    background: url(../img/ProSanteConnect_COULEURS.png) no-repeat center center;
    background-size: 224px 100%;
    height: 56px;
}

.pf-c-button.pf-m-control {
    border: none;
    --pf-c-button--after--BorderColor: rgba(255, 255, 255, 0);
}

image

Demande aide intégration

Bonjour,
Je tente d'intégrer keycloak et le package prosanteconnect à mon application springboot.
J'ai bien un compte chez l'ANS avec un client-id et un client-secret mais aucun moyen de transmettre les URL de redirection comme énoncé dans la documentation. Où puis-je transmettre ces URL ? J'ai bien fais un email à l'ANS directement mais pas de réponse précise.

D'autre part, auriez-vous un exemple d'intégration de bout en bout, côté keycloak mais aussi côté applicatif ? J'ai bien suivi la démonstration mais cela n'aide pas beaucoup pour l'intégration.

D'autre part il est mentionné qu'il faut valoriser la variable d'environnement "PROSANTECONNECT_BACASABLE=1". Je la passe bien dans mon conteneur docker la variable au moment du run -e PROSANTECONNECT_BACASABLE=1. Dois-je inclure cette variable à une requête ? Ou le simple fait qu'elle fasse partie du conteneur suffit-il ?

En vous remerciant pour les éléments que vous pouvez apporter.

Implement mTLS

mTLS usage for all requests between Keycloak and PSC's servers is set to be mandatory starting in June 2024 in BAS env, and 6 months after for the prod env.

This provider should allow for uploading (or providing a path) to a .PEM file containing the cert and key to be used for all mTLS calls, as well as checking that the client_id matches the CN on the certificate.

Given the deadline for mTLS being enforced on the BAS env, this should be a priority so to not lock users of this plugin out of the BAS env when the change is made by the PSC team.

Uncaught server error on KC 25.0.1

2024-07-01 14:59:40,508 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (executor-thread-1) Uncaught server error: java.lang.NoSuchMethodError: 'void org.keycloak.broker.provider.BrokeredIdentityContext.<init>(java.lang.String)'
        at fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProvider.extractIdentity(ProSanteConnectIdentityProvider.java:317)
        at org.keycloak.broker.oidc.OIDCIdentityProvider.getFederatedIdentity(OIDCIdentityProvider.java:396)
        at fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProvider.getFederatedIdentity(ProSanteConnectIdentityProvider.java:189)
        at org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider$Endpoint.authResponse(AbstractOAuth2IdentityProvider.java:557)
        at org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider$Endpoint$quarkusrestinvoker$authResponse_ab908fbdd086ee82e140d8a818c077362a2d04b4.invoke(Unknown Source)
        at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
        at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
        at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
        at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:582)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
        at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:1583)

Sur Keycloak 25.0.1, en bac à sable.

Plugin non compatible avec Keycloak 23.0.6

Il semblerait que le plugin ne soit pas compatible avec la version 23.0.6 de Keycloak.

Comment reproduire :

docker run --rm -v $HOME/keycloak/providers/:/opt/keycloak/providers/ -p 8080:8080 -e KC_HTTP_RELATIVE_PATH=/auth -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:23.0.6 start-dev

Stack trace :

Updating the configuration and installing your custom providers, if any. Please wait.
2024-03-08 15:26:07,373 WARN  [org.keycloak.services] (build-25) KC-SERVICES0047: psc-user-attribute-mapper (fr.ans.keycloak.mappers.ProSanteConnectUserAttributeMapper) is implementing the internal SPI identity-provider-mapper. This SPI is internal and may change without notice
2024-03-08 15:26:07,374 WARN  [org.keycloak.services] (build-25) KC-SERVICES0047: psc-username-template-mapper (fr.ans.keycloak.mappers.ProSanteConnectUsernameTemplateMapper) is implementing the internal SPI identity-provider-mapper. This SPI is internal and may change without notice
2024-03-08 15:26:07,611 WARN  [org.keycloak.services] (build-25) KC-SERVICES0047: psc (fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProviderFactory) is implementing the internal SPI social. This SPI is internal and may change without notice
ERROR: Failed to run 'build' command.
ERROR: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkus.resteasy.reactive.server.deployment.ResteasyReactiveProcessor#setupEndpoints threw an exception: java.lang.RuntimeException: jakarta.enterprise.inject.spi.DeploymentException: Non static nested resources classes are not supported: 'fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProvider$OIDCEndpoint'
	at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createEndpoints(EndpointIndexer.java:321)
	at io.quarkus.resteasy.reactive.server.deployment.ResteasyReactiveProcessor.setupEndpoints(ResteasyReactiveProcessor.java:696)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:864)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:282)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
	at java.base/java.lang.Thread.run(Thread.java:840)
	at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: jakarta.enterprise.inject.spi.DeploymentException: Non static nested resources classes are not supported: 'fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProvider$OIDCEndpoint'
	at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createEndpoints(EndpointIndexer.java:269)
	... 12 more

ERROR: Build failure: Build failed due to errors
	[error]: Build step io.quarkus.resteasy.reactive.server.deployment.ResteasyReactiveProcessor#setupEndpoints threw an exception: java.lang.RuntimeException: jakarta.enterprise.inject.spi.DeploymentException: Non static nested resources classes are not supported: 'fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProvider$OIDCEndpoint'
	at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createEndpoints(EndpointIndexer.java:321)
	at io.quarkus.resteasy.reactive.server.deployment.ResteasyReactiveProcessor.setupEndpoints(ResteasyReactiveProcessor.java:696)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:864)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:282)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
	at java.base/java.lang.Thread.run(Thread.java:840)
	at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: jakarta.enterprise.inject.spi.DeploymentException: Non static nested resources classes are not supported: 'fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProvider$OIDCEndpoint'
	at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createEndpoints(EndpointIndexer.java:269)
	... 12 more

ERROR: jakarta.enterprise.inject.spi.DeploymentException: Non static nested resources classes are not supported: 'fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProvider$OIDCEndpoint'
ERROR: Non static nested resources classes are not supported: 'fr.ans.keycloak.providers.prosanteconnect.ProSanteConnectIdentityProvider$OIDCEndpoint'

FEDERATED_ACCESS_TOKEN_RESPONSE not SET

En passant par votre connecteur keycloak-prosanteconnect, nous rencontrons toujours le même soucis reporté lors d'une demande précédente.
L'erreur intervient au niveau de org.keycloak.broker.oidc.OIDCIdentityProvider.authenticationFinished(OIDCIdentityProvider.java:642) où keycloak attend FEDERATED_ACCESS_TOKEN_RESPONSE qui n'est pas set.
Dans le code du connecteur PSC, fichier ProSanteConnectIdentityProvider.java ligne 371, si le token et le session state ne sont pas nul, alors FEDERATED_ACCESS_TOKEN_RESPONSE n'est pas set dans le context ce qui conduit dans notre cas à l'erreur décrite.
S'agit-il d'un problème de configuration et si oui auriez-vous une idée de son origine s'il vous plait?
Nous avons patché le repo keycloak-prosanteconnect en local en attendant pour pouvoir avancer sur nos développements.

Code pour construire keycloak-prosanteconnect-2.0.0.jar

Bonjour,
Toutes les branches du projet ont un pom permettant de construire

  <groupId>fr.ans.keycloak</groupId>
  <artifactId>keycloak-prosanteconnect</artifactId>
  <version>1.0.0</version>

Pourtant le readme parle de keycloak-prosanteconnect-2.0.0 et en effet, les captures sont faites sur des version 21.x.xx de Keycloak.

A quel endroit se trouve le le code permettant de fabriquer keycloak-prosanteconnect-2.0.0 ?

Merci d'avance,
Bien cordialement.

Compatibilité avec Keycloak 20

Bonjour,

Je viens de récupérer le provider, l'installation n'a pas posée de problème en revanche, par rapport aux screenshots donnés en exemple (au-delà du changement d'UI de Keycloak) je ne retrouve pas ni le champs du choix d'environnement (BAS vs Prod) ni le choix du niveau eIDAS.
image

Les paramètres présents dans "General Settings" sont spécifiables à la création du provider, les "Advanced" deviennent dispo ensuite.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.