Integrer l'authentification Keycloak dans l'application
This commit is contained in:
31
README.md
31
README.md
@@ -22,29 +22,34 @@ Le coeur de l'application se trouve dans `ChessCubing.App/`.
|
||||
- `ChessCubing.App/Pages/` : pages Razor du site et de l'application
|
||||
- `ChessCubing.App/Services/MatchEngine.cs` : logique metier des matchs
|
||||
- `ChessCubing.App/Services/MatchStore.cs` : persistance navigateur
|
||||
- `ChessCubing.App/Services/KeycloakAccountFactory.cs` : adaptation des roles Keycloak vers les claims Blazor
|
||||
- `ChessCubing.App/Services/AppAuthenticationStateProvider.cs` : session locale cote client
|
||||
- `ChessCubing.Server/` : backend d'authentification qui parle a Keycloak
|
||||
- `ChessCubing.App/wwwroot/` : assets statiques, manifeste, PDFs, appli Ethan
|
||||
- `keycloak/realm/chesscubing-realm.json` : realm importable avec client OIDC et roles
|
||||
- `docker-compose.yml` + `Dockerfile` : build Blazor, service via nginx et stack Keycloak/Postgres
|
||||
- `keycloak/realm/chesscubing-realm.json` : realm importable avec client Keycloak et roles
|
||||
- `keycloak/scripts/init-config.sh` : synchronisation automatique du client Keycloak au demarrage
|
||||
- `docker-compose.yml` + `Dockerfile` + `Dockerfile.auth` : front Blazor, API d'auth et stack Keycloak/Postgres
|
||||
|
||||
Le projet continue a exposer les routes historiques `index.html`, `application.html`, `chrono.html`, `cube.html` et `reglement.html`.
|
||||
|
||||
## Authentification Keycloak
|
||||
|
||||
L'application embarque maintenant une authentification OpenID Connect basee sur Keycloak.
|
||||
L'application embarque maintenant une authentification integree basee sur Keycloak, sans redirection utilisateur vers une page externe.
|
||||
|
||||
- toutes les pages du site restent accessibles sans connexion
|
||||
- un menu general en haut des pages site regroupe la navigation et les actions `Se connecter` / `Creer un compte` dans une modal integree
|
||||
- l'action `Creer un compte` ouvre le parcours d'inscription natif de Keycloak
|
||||
- les roles Keycloak du realm sont exposes dans l'application
|
||||
- le formulaire de connexion et le formulaire de creation de compte sont rendus directement dans l'application
|
||||
- un backend local `ChessCubing.Server` appelle Keycloak cote serveur pour la connexion, l'inscription et la recuperation du profil
|
||||
- une session cookie locale est ensuite exposee au front via `/api/auth/session`
|
||||
- les roles Keycloak du realm restent exposes dans l'application
|
||||
- l'etat du match est isole par utilisateur dans le navigateur grace a une cle de stockage derivee du compte connecte
|
||||
|
||||
Le realm importe par defaut :
|
||||
|
||||
- realm : `chesscubing`
|
||||
- client public OIDC : `chesscubing-web`
|
||||
- client Keycloak : `chesscubing-web`
|
||||
- roles de realm : `admin`, `organizer`, `player`
|
||||
- inscription utilisateur : activee
|
||||
- direct access grant : active
|
||||
|
||||
La gestion des utilisateurs se fait ensuite dans la console d'administration Keycloak.
|
||||
|
||||
@@ -60,6 +65,7 @@ docker compose up -d --build
|
||||
L'application est ensuite disponible sur `http://localhost:8080`.
|
||||
|
||||
La console Keycloak est servie via le meme nginx sur `http://localhost:8080/auth/admin/`.
|
||||
L'API d'authentification integree est servie derriere le meme point d'entree via `/api/auth/*`.
|
||||
|
||||
Identifiants d'administration par defaut pour le premier demarrage local :
|
||||
|
||||
@@ -68,6 +74,8 @@ Identifiants d'administration par defaut pour le premier demarrage local :
|
||||
|
||||
Ces valeurs peuvent etre surchargees via les variables d'environnement de `.env.example`.
|
||||
|
||||
Au demarrage, le service `keycloak-init` resynchronise automatiquement le realm courant pour garder l'inscription active et autoriser le flux de connexion integre, meme si la base Keycloak existe deja.
|
||||
|
||||
Si vous voulez reimporter completement le realm fourni dans `keycloak/realm/`, il faut repartir d'une base vide, par exemple avec `docker compose down -v` avant le redemarrage.
|
||||
|
||||
### Avec .NET 10
|
||||
@@ -77,7 +85,7 @@ dotnet restore ChessCubing.App/ChessCubing.App.csproj
|
||||
dotnet run --project ChessCubing.App/ChessCubing.App.csproj
|
||||
```
|
||||
|
||||
Le mode Docker reste la voie recommandee pour cette integration, car nginx y reverse-proxy egalement Keycloak sous `/auth/`.
|
||||
Le mode Docker reste la voie recommandee pour cette integration, car nginx y reverse-proxy egalement Keycloak sous `/auth/` et l'API d'auth sous `/api/`.
|
||||
|
||||
## Deploiement dans un LXC Proxmox
|
||||
|
||||
@@ -131,9 +139,10 @@ bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch
|
||||
- `ChessCubing.App/Pages/CubePage.razor` : phase cube
|
||||
- `ChessCubing.App/Pages/RulesPage.razor` : synthese du reglement
|
||||
- `ChessCubing.App/Services/MatchEngine.cs` : regles de jeu et transitions
|
||||
- `ChessCubing.App/Services/KeycloakAccountFactory.cs` : transformation des roles Keycloak en claims Blazor
|
||||
- `ChessCubing.App/wwwroot/appsettings.json` : configuration OIDC du client WebAssembly
|
||||
- `ChessCubing.App/Services/AppAuthenticationStateProvider.cs` : etat de session cote client
|
||||
- `ChessCubing.Server/Program.cs` : endpoints `/api/auth/*`
|
||||
- `keycloak/realm/chesscubing-realm.json` : realm, roles et client Keycloak importes
|
||||
- `docker-compose.yml` + `Dockerfile` : execution locale
|
||||
- `keycloak/scripts/init-config.sh` : mise en conformite du client Keycloak au demarrage
|
||||
- `docker-compose.yml` + `Dockerfile` + `Dockerfile.auth` : execution locale
|
||||
- `scripts/install-proxmox-lxc.sh` : creation et deploiement d'un LXC Proxmox
|
||||
- `scripts/update-proxmox-lxc.sh` : mise a jour d'un LXC existant depuis Git
|
||||
|
||||
Reference in New Issue
Block a user