Fix: Add quarkus.oidc.authentication.redirect-path=/auth/callback for OAuth callback handling

Quarkus OIDC needs explicit redirect-path configuration to handle the OAuth callback
from Keycloak at /auth/callback. Without this, the endpoint returns 404 Not Found
causing 502 Bad Gateway during authentication flow.

This fixes the OAuth callback 502 error after successful Keycloak authentication.
This commit is contained in:
dahoud
2025-12-14 00:52:37 +00:00
parent 9164f00aaa
commit d42c10d029
12 changed files with 28 additions and 244 deletions

View File

@@ -68,6 +68,7 @@ quarkus.oidc.auth-server-url=${KEYCLOAK_AUTH_SERVER_URL:https://security.lions.d
quarkus.oidc.client-id=unionflow-client
quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET}
quarkus.oidc.application-type=web-app
quarkus.oidc.authentication.redirect-path=/auth/callback
quarkus.oidc.authentication.force-redirect-https-scheme=true
quarkus.oidc.authentication.restore-path-after-redirect=true
quarkus.oidc.authentication.scopes=openid,profile,email,roles

File diff suppressed because one or more lines are too long

View File

@@ -541,7 +541,7 @@ PrimeFaces.FreyaConfigurator = {
},
replaceLink: function(linkElement, href) {
PrimeFaces.ajax.RESOURCE = 'javax.faces.Resource';
PrimeFaces.ajax.RESOURCE = 'jakarta.faces.Resource';
var isIE = this.isIE();

View File

@@ -541,7 +541,7 @@ PrimeFaces.FreyaConfigurator = {
},
replaceLink: function(linkElement, href) {
PrimeFaces.ajax.RESOURCE = 'javax.faces.Resource';
PrimeFaces.ajax.RESOURCE = 'jakarta.faces.Resource';
var isIE = this.isIE();

View File

@@ -541,7 +541,7 @@ PrimeFaces.FreyaConfigurator = {
},
replaceLink: function(linkElement, href) {
PrimeFaces.ajax.RESOURCE = 'javax.faces.Resource';
PrimeFaces.ajax.RESOURCE = 'jakarta.faces.Resource';
var isIE = this.isIE();

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib xmlns="https://xmlns.jcp.org/xml/ns/javaee"
<facelet-taglib xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee
https://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_3.xsd"
version="2.3">
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-facelettaglibrary_4_0.xsd"
version="4.0">
<namespace>http://unionflow.lions.dev/jsf</namespace>
<composite-library-name>unionflow</composite-library-name>
</facelet-taglib>

View File

@@ -2,7 +2,7 @@
# Ce fichier est utilisé avec le profil Quarkus "prod"
# Configuration HTTP
quarkus.http.port=8086
quarkus.http.port=8080
quarkus.http.host=0.0.0.0
quarkus.http.root-path=/
quarkus.http.so-reuse-port=true
@@ -69,11 +69,12 @@ quarkus.oidc.client-id=unionflow-client
quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET}
quarkus.oidc.application-type=web-app
quarkus.oidc.authentication.redirect-path=/auth/callback
quarkus.oidc.authentication.force-redirect-https-scheme=true
quarkus.oidc.authentication.restore-path-after-redirect=true
quarkus.oidc.authentication.scopes=openid,profile,email,roles
quarkus.oidc.token.issuer=https://security.lions.dev/realms/unionflow
quarkus.oidc.tls.verification=required
quarkus.oidc.authentication.cookie-same-site=strict
quarkus.oidc.authentication.cookie-same-site=lax
quarkus.oidc.authentication.java-script-auto-redirect=false
quarkus.oidc.discovery-enabled=true
quarkus.oidc.verify-access-token=true

View File

@@ -115,3 +115,19 @@ unionflow.security.password.min-length=${PASSWORD_MIN_LENGTH:8}
unionflow.security.password.require-special-chars=${PASSWORD_REQUIRE_SPECIAL:true}
unionflow.security.max-login-attempts=${MAX_LOGIN_ATTEMPTS:5}
unionflow.security.lockout-duration=${LOCKOUT_DURATION:300}
# ===================================================================================================
# Configuration Quarkus Arc CDI - Intégration avec JSF/MyFaces
# ===================================================================================================
# Active le mode découverte de beans pour permettre à Arc de gérer tous les beans CDI et JSF
quarkus.arc.unremovable-types=jakarta.faces.application.Application,jakarta.faces.context.FacesContext,jakarta.enterprise.context.Conversation
# Permet à Arc de détecter et gérer les beans avec annotations JSF custom scopes (@ViewScoped, etc.)
quarkus.arc.detect-unused-false-positives=true
# Force Arc à gérer les beans même s'ils ne sont pas référencés directement
quarkus.arc.remove-unused-beans=false
# Active le support complet CDI pour JSF Expression Language (EL)
# Cela permet à MyFaces d'utiliser Arc BeanManager pour résoudre #{bean.property}
quarkus.arc.auto-inject-fields=true

View File

@@ -1,234 +0,0 @@
dev\lions\unionflow\client\view\UtilisateursBean$Filtres.class
dev\lions\unionflow\client\validation\ValidationGroups$FullRegistration.class
dev\lions\unionflow\client\view\MembreProfilBean$MembreFamille.class
dev\lions\unionflow\client\view\ConfigurationBean$ConfigurationSysteme.class
dev\lions\unionflow\client\view\CotisationsBean$StatistiquesFinancieres.class
dev\lions\unionflow\client\dto\FormulaireDTO.class
dev\lions\unionflow\client\security\TokenRefreshService.class
dev\lions\unionflow\client\view\MembreDashboardBean$Membre.class
dev\lions\unionflow\client\view\MembreCotisationBean$Echeance.class
dev\lions\unionflow\client\view\MembreCotisationBean$Cotisation.class
dev\lions\unionflow\client\view\GuestPreferences.class
dev\lions\unionflow\client\view\MembreDashboardBean.class
dev\lions\unionflow\client\security\PermissionChecker.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$UnprocessableEntityException.class
dev\lions\unionflow\client\service\SouscriptionService.class
dev\lions\unionflow\client\dto\SouscriptionDTO$StatutSouscription.class
dev\lions\unionflow\client\view\UtilisateursBean$NouvelUtilisateur.class
dev\lions\unionflow\client\dto\AuditLogDTO.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$GatewayTimeoutException.class
dev\lions\unionflow\client\service\PreferencesService.class
dev\lions\unionflow\client\view\MembreProfilBean$AidesData.class
dev\lions\unionflow\client\view\PersonnelBean$ActiviteRecente.class
dev\lions\unionflow\client\view\MembreDashboardBean$Evenement.class
dev\lions\unionflow\client\view\EntitesGestionBean$Entite.class
dev\lions\unionflow\client\security\JwtClientRequestFilter.class
dev\lions\unionflow\client\validation\PhoneNumberValidator.class
dev\lions\unionflow\client\view\RapportsBean$RepartitionMembres.class
dev\lions\unionflow\client\dto\auth\LoginResponse.class
dev\lions\unionflow\client\view\CotisationsBean$RepartitionMethode.class
dev\lions\unionflow\client\view\DocumentsBean$NiveauNavigation.class
dev\lions\unionflow\client\view\RolesBean$StatutRole.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$UnauthorizedException.class
dev\lions\unionflow\client\dto\auth\LoginResponse$UserInfo.class
dev\lions\unionflow\client\view\RapportDetailsBean.class
dev\lions\unionflow\client\view\SuperAdminBean$Entite.class
dev\lions\unionflow\client\view\DemandesAideBean.class
dev\lions\unionflow\client\view\RapportsBean$NouveauRapport.class
dev\lions\unionflow\client\dto\auth\LoginRequest.class
dev\lions\unionflow\client\view\DocumentsBean$Dossier.class
dev\lions\unionflow\client\dto\AnalyticsDataDTO.class
dev\lions\unionflow\client\view\MembreDashboardBean$Alerte.class
dev\lions\unionflow\client\validation\ValidMemberNumber.class
dev\lions\unionflow\client\view\RapportsBean$Objectif.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$BadGatewayException.class
dev\lions\unionflow\client\view\UserSession$CurrentUser.class
dev\lions\unionflow\client\view\DemandesAideBean$DemandeAide.class
dev\lions\unionflow\client\view\FavorisBean$DocumentFavorite.class
dev\lions\unionflow\client\service\WaveService.class
dev\lions\unionflow\client\view\DocumentsBean$Document.class
dev\lions\unionflow\client\view\RolesBean.class
dev\lions\unionflow\client\view\MembreProfilBean$PaiementCotisation.class
dev\lions\unionflow\client\view\OrganisationDetailBean.class
dev\lions\unionflow\client\service\AssociationService$PerformanceAssociationDTO.class
dev\lions\unionflow\client\view\RolesBean$TypeRole.class
dev\lions\unionflow\client\view\DocumentsBean$NouveauDocument.class
dev\lions\unionflow\client\dto\WaveCheckoutSessionDTO.class
dev\lions\unionflow\client\service\MembreService.class
dev\lions\unionflow\client\view\UserSession.class
dev\lions\unionflow\client\view\ConfigurationBean$ConfigurationPaiements.class
dev\lions\unionflow\client\view\CotisationsBean.class
dev\lions\unionflow\client\dto\SouscriptionDTO$TypeFacturation.class
dev\lions\unionflow\client\dto\auth\LoginResponse$EntiteInfo.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$BadRequestException.class
dev\lions\unionflow\client\view\MembreInscriptionBean.class
dev\lions\unionflow\client\view\RapportsBean$HistoriqueRapport.class
dev\lions\unionflow\client\view\RolesBean$Utilisateur.class
dev\lions\unionflow\client\validation\ValidationGroups$UpdateAssociation.class
dev\lions\unionflow\client\view\PersonnelBean.class
dev\lions\unionflow\client\view\MembreDashboardBean$Activite.class
dev\lions\unionflow\client\constants\StatutOrganisationConstants.class
dev\lions\unionflow\client\view\SouscriptionBean$AlerteQuota.class
dev\lions\unionflow\client\view\DemandesBean$Gestionnaire.class
dev\lions\unionflow\client\service\MembreService$ResultatImportDTO.class
dev\lions\unionflow\client\view\RapportsBean$SourceRevenus.class
dev\lions\unionflow\client\view\RapportsBean$TopEntite.class
dev\lions\unionflow\client\UnionFlowClientApplication.class
dev\lions\unionflow\client\view\GuestPreferences$ComponentTheme.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$NotFoundException.class
dev\lions\unionflow\client\view\SuperAdminBean$EvolutionMois.class
dev\lions\unionflow\client\view\UtilisateursBean$Organisation.class
dev\lions\unionflow\client\security\TokenCleanupService.class
dev\lions\unionflow\client\view\FavorisBean$RaccourciPersonnalise.class
dev\lions\unionflow\client\view\SuperAdminBean$Alerte.class
dev\lions\unionflow\client\view\DashboardBean$Activity.class
dev\lions\unionflow\client\view\ParametresBean$SessionActive.class
dev\lions\unionflow\client\view\EntitesGestionBean$Filtres.class
dev\lions\unionflow\client\view\ConfigurationBean$Sauvegarde.class
dev\lions\unionflow\client\security\JwtTokenManager.class
dev\lions\unionflow\client\view\MembreListeBean$Entite.class
dev\lions\unionflow\client\view\MembreListeBean.class
dev\lions\unionflow\client\view\RapportsBean$EvolutionMensuelle.class
dev\lions\unionflow\client\service\AssociationService.class
dev\lions\unionflow\client\validation\ValidationGroups.class
dev\lions\unionflow\client\service\ValidationService.class
dev\lions\unionflow\client\view\MembreProfilBean$Membre.class
dev\lions\unionflow\client\view\MembreRechercheBean.class
dev\lions\unionflow\client\service\NotificationClientService.class
dev\lions\unionflow\client\view\MembreRechercheBean$MessageGroupe.class
dev\lions\unionflow\client\view\MembreProfilBean$DemandesData.class
dev\lions\unionflow\client\view\MembreDashboardBean$Rappel.class
dev\lions\unionflow\client\view\MembreProfilBean.class
dev\lions\unionflow\client\view\CotisationsGestionBean.class
dev\lions\unionflow\client\view\MembreProfilBean$Aide.class
dev\lions\unionflow\client\view\ParametresBean.class
dev\lions\unionflow\client\service\AdhesionService.class
dev\lions\unionflow\client\view\SuperAdminBean$MoisRevenu.class
dev\lions\unionflow\client\security\TokenRefreshService$TokenInfo.class
dev\lions\unionflow\client\view\WaveBean.class
dev\lions\unionflow\client\view\AdhesionsBean$StatistiquesAdhesion.class
dev\lions\unionflow\client\view\RapportsBean$IndicateursGlobaux.class
dev\lions\unionflow\client\view\AdminFormulaireBean.class
dev\lions\unionflow\client\view\DemandesAideBean$StatistiquesDemandes.class
dev\lions\unionflow\client\service\FormulaireService.class
dev\lions\unionflow\client\validation\ValidationGroups$UpdateMember.class
dev\lions\unionflow\client\view\DocumentsBean$Filtres.class
dev\lions\unionflow\client\view\CotisationsGestionBean$FiltresCotisations.class
dev\lions\unionflow\client\view\MembreRechercheBean$Filtres.class
dev\lions\unionflow\client\exception\ViewExpiredExceptionHandler.class
dev\lions\unionflow\client\dto\SouscriptionDTO.class
dev\lions\unionflow\client\view\MembreProfilBean$ContactData.class
dev\lions\unionflow\client\service\AnalyticsService.class
dev\lions\unionflow\client\view\MembreProfilBean$EvenementsData.class
dev\lions\unionflow\client\service\NotificationService.class
dev\lions\unionflow\client\view\OrganisationsBean.class
dev\lions\unionflow\client\service\AssociationService$StatistiquesAssociationDTO.class
dev\lions\unionflow\client\view\MembreProfilBean$Demande.class
dev\lions\unionflow\client\service\RestClientExceptionMapper.class
dev\lions\unionflow\client\validation\ValidationGroups$CreateMember.class
dev\lions\unionflow\client\view\DemandesBean$Demande.class
dev\lions\unionflow\client\view\LoginBean.class
dev\lions\unionflow\client\security\AuthenticationFilter.class
dev\lions\unionflow\client\service\AuditService.class
dev\lions\unionflow\client\view\FavorisBean.class
dev\lions\unionflow\client\view\EvenementsBean$FiltresEvenement.class
dev\lions\unionflow\client\view\SouscriptionBean.class
dev\lions\unionflow\client\view\PersonnelBean$StatistiquesProfil.class
dev\lions\unionflow\client\view\MembreCotisationBean.class
dev\lions\unionflow\client\dto\EvenementDTO.class
dev\lions\unionflow\client\dto\WaveBalanceDTO.class
dev\lions\unionflow\client\view\SuperAdminBean$TypeEntite.class
dev\lions\unionflow\client\view\AdhesionsBean.class
dev\lions\unionflow\client\view\MembreRechercheBean$Statistiques.class
dev\lions\unionflow\client\view\GuideBean.class
dev\lions\unionflow\client\service\DemandeAideService.class
dev\lions\unionflow\client\exception\ViewExpiredExceptionHandlerFactory.class
dev\lions\unionflow\client\service\ExportClientService.class
dev\lions\unionflow\client\view\EntitesGestionBean$Statistiques.class
dev\lions\unionflow\client\validation\ValidationGroups$AdminData.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$InternalServerErrorException.class
dev\lions\unionflow\client\view\ConfigurationBean$ConfigurationGenerale.class
dev\lions\unionflow\client\validation\ValidationGroups$QuickRegistration.class
dev\lions\unionflow\client\view\DemandesBean.class
dev\lions\unionflow\client\view\FavorisBean$PageFavorite.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$ForbiddenException.class
dev\lions\unionflow\client\view\DashboardBean$MoisFinancier.class
dev\lions\unionflow\client\service\MembreService$StatistiquesMembreDTO.class
dev\lions\unionflow\client\view\CotisationsGestionBean$MembreEnRetard.class
dev\lions\unionflow\client\view\SuperAdminBean$Activite.class
dev\lions\unionflow\client\view\UserSession$EntiteInfo.class
dev\lions\unionflow\client\view\FormulaireBean.class
dev\lions\unionflow\client\view\CotisationsBean$Filtres.class
dev\lions\unionflow\client\view\CotisationsGestionBean$NouvelleCampagne.class
dev\lions\unionflow\client\view\MembreProfilBean$Statistiques.class
dev\lions\unionflow\client\view\SecurityStatusBean.class
dev\lions\unionflow\client\view\RolesBean$Role.class
dev\lions\unionflow\client\view\DemandesBean$Membre.class
dev\lions\unionflow\client\view\RolesBean$Permission.class
dev\lions\unionflow\client\view\FavorisBean$ContactFavorite.class
dev\lions\unionflow\client\view\MembreRechercheBean$Entite.class
dev\lions\unionflow\client\view\RapportsBean$KPI.class
dev\lions\unionflow\client\view\MembreProfilBean$Activite.class
dev\lions\unionflow\client\service\AuthenticationService$AuthenticationException.class
dev\lions\unionflow\client\view\MembreProfilBean$HistoriqueData.class
dev\lions\unionflow\client\service\CotisationService.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$UnknownHttpStatusException.class
dev\lions\unionflow\client\dto\AssociationDTO.class
dev\lions\unionflow\client\view\DemandesAideBean$Filtres.class
dev\lions\unionflow\client\service\AuthenticationService.class
dev\lions\unionflow\client\dto\DemandeAideDTO.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$ConflictException.class
dev\lions\unionflow\client\view\SuperAdminBean$RevenusData.class
dev\lions\unionflow\client\view\CotisationsBean$RappelCotisation.class
dev\lions\unionflow\client\dto\CotisationDTO.class
dev\lions\unionflow\client\view\UtilisateursBean.class
dev\lions\unionflow\client\validation\ValidationGroups$BulkImport.class
dev\lions\unionflow\client\view\PersonnelBean$NotificationPersonnelle.class
dev\lions\unionflow\client\view\AdhesionsBean$NouvelleAdhesion.class
dev\lions\unionflow\client\view\CotisationsGestionBean$Organisation.class
dev\lions\unionflow\client\dto\TypeOrganisationClientDTO.class
dev\lions\unionflow\client\validation\MemberNumberValidator.class
dev\lions\unionflow\client\view\AdhesionsBean$FiltresAdhesion.class
dev\lions\unionflow\client\view\EntitesGestionBean$Administrateur.class
dev\lions\unionflow\client\view\DemandesAideBean$EtapeWorkflow.class
dev\lions\unionflow\client\view\PreferencesBean.class
dev\lions\unionflow\client\view\PersonnelBean$DocumentPersonnel.class
dev\lions\unionflow\client\view\MembreProfilBean$EvenementParticipation.class
dev\lions\unionflow\client\view\CotisationsBean$EvolutionPaiement.class
dev\lions\unionflow\client\view\CotisationsBean$NouvelleCotisation.class
dev\lions\unionflow\client\view\MembreRechercheBean$RechercheSauvegardee.class
dev\lions\unionflow\client\view\HelloView.class
dev\lions\unionflow\client\view\EntitesGestionBean.class
dev\lions\unionflow\client\view\RapportsBean$Alerte.class
dev\lions\unionflow\client\view\EvenementsBean$StatistiquesEvenements.class
dev\lions\unionflow\client\view\DemandesBean$NouvelleDemande.class
dev\lions\unionflow\client\service\TypeOrganisationClientService.class
dev\lions\unionflow\client\view\DashboardBean.class
dev\lions\unionflow\client\view\DocumentsBean$StatistiquesDocuments.class
dev\lions\unionflow\client\view\MembreRechercheBean$Membre.class
dev\lions\unionflow\client\view\ConfigurationBean.class
dev\lions\unionflow\client\converter\MembreConverter.class
dev\lions\unionflow\client\view\ConfigurationBean$ConfigurationEmail.class
dev\lions\unionflow\client\view\CotisationsGestionBean$OrganisationPerformante.class
dev\lions\unionflow\client\view\MembreProfilBean$CotisationsData.class
dev\lions\unionflow\client\view\ConfigurationBean$ConfigurationSecurite.class
dev\lions\unionflow\client\service\ValidationService$ValidationResult.class
dev\lions\unionflow\client\view\RapportsBean.class
dev\lions\unionflow\client\service\EvenementService.class
dev\lions\unionflow\client\view\RolesBean$1.class
dev\lions\unionflow\client\view\AuditBean.class
dev\lions\unionflow\client\view\SuperAdminBean.class
dev\lions\unionflow\client\view\DemandesAideBean$NouvelleDemande.class
dev\lions\unionflow\client\view\EvenementsBean.class
dev\lions\unionflow\client\dto\AdhesionDTO.class
dev\lions\unionflow\client\service\RestClientExceptionMapper$ServiceUnavailableException.class
dev\lions\unionflow\client\dto\MembreDTO.class
dev\lions\unionflow\client\view\DocumentsBean.class
dev\lions\unionflow\client\validation\ValidPhoneNumber.class
dev\lions\unionflow\client\view\TypeOrganisationsAdminBean.class
dev\lions\unionflow\client\view\GuideBean$SectionGuide.class
dev\lions\unionflow\client\view\UtilisateursBean$Utilisateur.class
dev\lions\unionflow\client\service\NotificationService$NotificationGroupeeRequest.class
dev\lions\unionflow\client\validation\ValidationGroups$CreateAssociation.class
dev\lions\unionflow\client\view\UtilisateursBean$StatistiquesUtilisateurs.class
dev\lions\unionflow\client\view\NavigationBean.class

View File

@@ -67,6 +67,7 @@ C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quark
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\UtilisateursBean.java
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\AuditBean.java
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\LoginBean.java
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\service\MembreImportMultipartForm.java
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\dto\auth\LoginRequest.java
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\AdminFormulaireBean.java
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-client-quarkus-primefaces-freya\src\main\java\dev\lions\unionflow\client\view\SouscriptionBean.java