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.
134 lines
6.5 KiB
Properties
134 lines
6.5 KiB
Properties
# Configuration UnionFlow Client
|
||
quarkus.application.name=unionflow-client
|
||
quarkus.application.version=1.0.0
|
||
|
||
# Configuration HTTP
|
||
quarkus.http.port=8086
|
||
quarkus.http.host=0.0.0.0
|
||
quarkus.http.root-path=/
|
||
quarkus.http.so-reuse-port=true
|
||
quarkus.http.tcp-quick-ack=true
|
||
quarkus.http.tcp-cork=true
|
||
|
||
# Configuration Session HTTP
|
||
quarkus.http.session-timeout=60m
|
||
quarkus.http.session-cookie-same-site=lax
|
||
quarkus.http.session-cookie-http-only=true
|
||
quarkus.http.session-cookie-secure=false
|
||
|
||
# Configuration logging
|
||
quarkus.log.console.enable=true
|
||
quarkus.log.console.level=INFO
|
||
quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{2.}] (%t) %s%e%n
|
||
|
||
# MyFaces Configuration
|
||
quarkus.myfaces.project-stage=Development
|
||
quarkus.myfaces.state-saving-method=server
|
||
quarkus.myfaces.number-of-views-in-session=50
|
||
quarkus.myfaces.number-of-sequential-views-in-session=10
|
||
quarkus.myfaces.serialize-state-in-session=false
|
||
quarkus.myfaces.client-view-state-timeout=3600000
|
||
quarkus.myfaces.view-expired-exception-handler-redirect-page=/
|
||
quarkus.myfaces.check-id-production-mode=false
|
||
quarkus.myfaces.strict-xhtml-links=false
|
||
quarkus.myfaces.refresh-transient-build-on-pss=true
|
||
quarkus.myfaces.resource-max-time-expires=604800000
|
||
quarkus.myfaces.resource-buffer-size=2048
|
||
|
||
# PrimeFaces Configuration
|
||
# IMPORTANT: Nous laissons PrimeFaces sans th<74>me par d<>faut et chargeons le th<74>me Freya via index.xhtml/main-template.xhtml
|
||
# pour <20>viter tout double-chargement (ex: Saga + Freya).
|
||
primefaces.THEME=none
|
||
primefaces.FONT_AWESOME=true
|
||
primefaces.CLIENT_SIDE_VALIDATION=true
|
||
primefaces.MOVE_SCRIPTS_TO_BOTTOM=true
|
||
primefaces.CSP=false
|
||
primefaces.UPLOADER=commons
|
||
primefaces.AUTO_UPDATE=false
|
||
primefaces.CACHE_PROVIDER=org.primefaces.cache.DefaultCacheProvider
|
||
primefaces.RESOURCE_HANDLER=org.primefaces.application.resource.PrimeResourceHandler
|
||
|
||
# OmniFaces Configuration
|
||
omnifaces.CDN_RESOURCE_HANDLER_DISABLED=true
|
||
omnifaces.COMBINED_RESOURCE_HANDLER_DISABLED=false
|
||
|
||
# Configuration Backend UnionFlow
|
||
unionflow.backend.url=${UNIONFLOW_BACKEND_URL:http://localhost:8085}
|
||
|
||
# Configuration REST Client
|
||
quarkus.rest-client."unionflow-api".url=${unionflow.backend.url}
|
||
quarkus.rest-client."unionflow-api".scope=jakarta.inject.Singleton
|
||
quarkus.rest-client."unionflow-api".connect-timeout=5000
|
||
quarkus.rest-client."unionflow-api".read-timeout=30000
|
||
|
||
# Gestion des erreurs REST + propagation JWT vers le backend
|
||
quarkus.rest-client."unionflow-api".providers=dev.lions.unionflow.client.service.RestClientExceptionMapper,dev.lions.unionflow.client.security.JwtClientRequestFilter
|
||
|
||
# Configuration Keycloak OIDC
|
||
quarkus.oidc.enabled=true
|
||
quarkus.oidc.auth-server-url=https://security.lions.dev/realms/unionflow
|
||
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.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=none
|
||
# quarkus.oidc.authentication.force-redirect-https=false # Not supported in this Quarkus version
|
||
quarkus.oidc.authentication.cookie-same-site=lax
|
||
quarkus.oidc.authentication.java-script-auto-redirect=false
|
||
quarkus.oidc.discovery-enabled=true
|
||
|
||
# TEMPORAIRE: contourner un access token invalide (claim realm_access dupliqu<71>e c<>t<EFBFBD> KC)
|
||
# Pour un flux web-app, on peut s'appuyer sur l'ID Token et d<>sactiver la v<>rification de l'Access Token
|
||
# Les deux cl<63>s ci?dessous couvrent les variantes selon version de Quarkus; l'une sera ignor<6F>e si non support<72>e.
|
||
# Vérification du token activée
|
||
# ✅ CORRIGÉ: Le mapper Keycloak problématique a été supprimé (17/11/2025)
|
||
# Le scope "roles" gère maintenant correctement realm_access.roles (objet unique)
|
||
quarkus.oidc.verify-access-token=true
|
||
|
||
# Activation de la sécurité
|
||
quarkus.security.auth.enabled=true
|
||
|
||
# Chemins publics (non prot<6F>g<EFBFBD>s par OIDC) - Doit <20>tre d<>fini en premier
|
||
# La page d'accueil (/) et index.xhtml sont publics pour permettre l'affichage initial
|
||
# IMPORTANT: Les ressources JSF/PrimeFaces sont servies via /jakarta.faces.resource/* (ou /javax.faces.resource/* selon la stack)
|
||
# Elles doivent <20>tre publiques pour permettre le chargement des CSS/JS (th<74>me Freya, primeicons, primeflex, etc.)
|
||
# On inclut <20>galement /q/oidc/* pour laisser Quarkus OIDC exposer ses endpoints internes si n<>cessaire.
|
||
quarkus.http.auth.permission.public.paths=/,/index.xhtml,/pages/public/*,/auth/*,/q/*,/q/oidc/*,/favicon.ico,/resources/*,/META-INF/resources/*,/images/*,/jakarta.faces.resource/*,/javax.faces.resource/*
|
||
quarkus.http.auth.permission.public.policy=permit
|
||
|
||
# Tous les autres chemins nécessitent une authentification
|
||
# IMPORTANT: L'ordre est crucial - les permissions publiques doivent être définies AVANT les permissions authentifiées
|
||
# Quarkus OIDC redirigera automatiquement vers Keycloak pour les chemins non publics
|
||
quarkus.http.auth.permission.authenticated.paths=/*
|
||
quarkus.http.auth.permission.authenticated.policy=authenticated
|
||
|
||
# Configuration Session
|
||
unionflow.session.timeout=${SESSION_TIMEOUT:1800}
|
||
unionflow.session.remember-me.duration=${REMEMBER_ME_DURATION:604800}
|
||
|
||
# Configuration de sécurité
|
||
unionflow.security.enable-csrf=${ENABLE_CSRF:true}
|
||
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
|