feat: Finalisation du projet lions-user-manager
- Ajout du module client Quarkus PrimeFaces Freya avec interface complète - Ajout de l'AuditResource pour la gestion des logs d'audit - Ajout du SyncResource pour la synchronisation Keycloak - Ajout du SyncServiceImpl pour les opérations de synchronisation - Ajout des DTOs de synchronisation (SyncStatusDTO, etc.) - Corrections mineures dans RoleMapper, RoleServiceImpl, AuditServiceImpl - Configuration des properties pour dev et prod - Ajout de la configuration Claude Code (.claude/) - Documentation complète du projet (AI_HANDOFF_DOCUMENT.md) Le projet compile maintenant avec succès (BUILD SUCCESS). Tous les modules (API, Server Impl, Client) sont fonctionnels.
This commit is contained in:
206
scripts/setup-keycloak-client.md
Normal file
206
scripts/setup-keycloak-client.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# Configuration du client Keycloak pour Lions User Manager
|
||||
|
||||
## Configuration requise
|
||||
|
||||
Le serveur attend un client avec les propriétés suivantes :
|
||||
- **Client ID**: `lions-user-manager`
|
||||
- **Realm**: `master`
|
||||
- **Type**: Service Account (confidential client)
|
||||
- **Secret**: `dev-secret-change-me` (ou générer un nouveau secret)
|
||||
|
||||
## Option 1 : Via l'interface web Keycloak
|
||||
|
||||
1. **Accéder à Keycloak Admin Console**
|
||||
- URL: http://localhost:8180
|
||||
- Se connecter avec `admin` / `admin`
|
||||
|
||||
2. **Sélectionner le realm `master`**
|
||||
- Dans le menu déroulant en haut à gauche
|
||||
|
||||
3. **Créer le client**
|
||||
- Aller dans **Clients** → **Create client**
|
||||
- **Client type**: OpenID Connect
|
||||
- **Client ID**: `lions-user-manager`
|
||||
- Cliquer sur **Next**
|
||||
|
||||
4. **Configurer le client**
|
||||
- **Client authentication**: ON (confidential client)
|
||||
- **Authorization**: OFF (pour l'instant)
|
||||
- **Authentication flow**: Standard flow: OFF, Direct access grants: OFF, Service accounts roles: ON
|
||||
- Cliquer sur **Next** puis **Save**
|
||||
|
||||
5. **Récupérer le secret**
|
||||
- Dans l'onglet **Credentials**
|
||||
- Copier le **Client secret** (ou régénérer si nécessaire)
|
||||
- Mettre à jour `application-dev.properties` avec ce secret :
|
||||
```properties
|
||||
quarkus.oidc.credentials.secret=VOTRE_SECRET_ICI
|
||||
```
|
||||
|
||||
6. **Attribuer les rôles au service account**
|
||||
- Aller dans **Users** → Chercher `service-account-lions-user-manager`
|
||||
- Cliquer sur l'utilisateur
|
||||
- Aller dans l'onglet **Role mapping**
|
||||
- Cliquer sur **Assign role**
|
||||
- Filtrer par **Filter by realm roles**
|
||||
- Sélectionner le rôle **admin** (ou les rôles nécessaires)
|
||||
- Cliquer sur **Assign**
|
||||
|
||||
## Option 2 : Via kcadm.sh (ligne de commande)
|
||||
|
||||
```bash
|
||||
# 1. Se connecter à Keycloak
|
||||
kcadm.sh config credentials \
|
||||
--server http://localhost:8180 \
|
||||
--realm master \
|
||||
--user admin \
|
||||
--password admin
|
||||
|
||||
# 2. Créer le client
|
||||
kcadm.sh create clients -r master -s clientId=lions-user-manager \
|
||||
-s enabled=true \
|
||||
-s serviceAccountsEnabled=true \
|
||||
-s standardFlowEnabled=false \
|
||||
-s directAccessGrantsEnabled=false \
|
||||
-s publicClient=false \
|
||||
-s protocol=openid-connect
|
||||
|
||||
# 3. Récupérer l'UUID du client
|
||||
CLIENT_UUID=$(kcadm.sh get clients -r master --fields id,clientId | \
|
||||
jq -r '.[] | select(.clientId=="lions-user-manager") | .id')
|
||||
|
||||
# 4. Récupérer ou définir le secret
|
||||
# Option A: Récupérer le secret généré automatiquement
|
||||
kcadm.sh get "clients/$CLIENT_UUID/client-secret" -r master
|
||||
|
||||
# Option B: Définir un secret personnalisé
|
||||
kcadm.sh update "clients/$CLIENT_UUID/client-secret" -r master \
|
||||
-s value=dev-secret-change-me
|
||||
|
||||
# 5. Attribuer le rôle admin au service account
|
||||
kcadm.sh add-roles -r master \
|
||||
--uusername "service-account-lions-user-manager" \
|
||||
--rolename admin
|
||||
```
|
||||
|
||||
## Option 3 : Script PowerShell (Windows)
|
||||
|
||||
Créez un fichier `setup-keycloak-client.ps1` :
|
||||
|
||||
```powershell
|
||||
# Configuration
|
||||
$KEYCLOAK_URL = "http://localhost:8180"
|
||||
$ADMIN_USER = "admin"
|
||||
$ADMIN_PASSWORD = "admin"
|
||||
$REALM = "master"
|
||||
$CLIENT_ID = "lions-user-manager"
|
||||
$CLIENT_SECRET = "dev-secret-change-me"
|
||||
|
||||
# Obtenir le token admin
|
||||
$tokenResponse = Invoke-RestMethod -Uri "$KEYCLOAK_URL/realms/master/protocol/openid-connect/token" `
|
||||
-Method Post `
|
||||
-ContentType "application/x-www-form-urlencoded" `
|
||||
-Body @{
|
||||
grant_type = "password"
|
||||
client_id = "admin-cli"
|
||||
username = $ADMIN_USER
|
||||
password = $ADMIN_PASSWORD
|
||||
}
|
||||
|
||||
$accessToken = $tokenResponse.access_token
|
||||
$headers = @{
|
||||
"Authorization" = "Bearer $accessToken"
|
||||
"Content-Type" = "application/json"
|
||||
}
|
||||
|
||||
# Créer le client
|
||||
$clientBody = @{
|
||||
clientId = $CLIENT_ID
|
||||
enabled = $true
|
||||
serviceAccountsEnabled = $true
|
||||
standardFlowEnabled = $false
|
||||
directAccessGrantsEnabled = $false
|
||||
publicClient = $false
|
||||
protocol = "openid-connect"
|
||||
} | ConvertTo-Json
|
||||
|
||||
try {
|
||||
$createResponse = Invoke-RestMethod -Uri "$KEYCLOAK_URL/admin/realms/$REALM/clients" `
|
||||
-Method Post `
|
||||
-Headers $headers `
|
||||
-Body $clientBody
|
||||
|
||||
Write-Host "Client créé avec succès"
|
||||
} catch {
|
||||
Write-Host "Erreur lors de la création du client: $_"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Récupérer l'UUID du client
|
||||
$clients = Invoke-RestMethod -Uri "$KEYCLOAK_URL/admin/realms/$REALM/clients?clientId=$CLIENT_ID" `
|
||||
-Method Get `
|
||||
-Headers $headers
|
||||
|
||||
$clientUuid = $clients[0].id
|
||||
Write-Host "Client UUID: $clientUuid"
|
||||
|
||||
# Définir le secret
|
||||
$secretBody = @{
|
||||
value = $CLIENT_SECRET
|
||||
} | ConvertTo-Json
|
||||
|
||||
Invoke-RestMethod -Uri "$KEYCLOAK_URL/admin/realms/$REALM/clients/$clientUuid/client-secret" `
|
||||
-Method Put `
|
||||
-Headers $headers `
|
||||
-Body $secretBody
|
||||
|
||||
Write-Host "Secret défini: $CLIENT_SECRET"
|
||||
|
||||
# Attribuer le rôle admin au service account
|
||||
$serviceAccountUsername = "service-account-$CLIENT_ID"
|
||||
$users = Invoke-RestMethod -Uri "$KEYCLOAK_URL/admin/realms/$REALM/users?username=$serviceAccountUsername" `
|
||||
-Method Get `
|
||||
-Headers $headers
|
||||
|
||||
if ($users.Count -eq 0) {
|
||||
Write-Host "Service account non trouvé. Il sera créé automatiquement lors de la première utilisation."
|
||||
} else {
|
||||
$serviceAccountId = $users[0].id
|
||||
|
||||
# Récupérer le rôle admin
|
||||
$roles = Invoke-RestMethod -Uri "$KEYCLOAK_URL/admin/realms/$REALM/roles/admin" `
|
||||
-Method Get `
|
||||
-Headers $headers
|
||||
|
||||
# Assigner le rôle
|
||||
$roleBody = @($roles) | ConvertTo-Json
|
||||
|
||||
Invoke-RestMethod -Uri "$KEYCLOAK_URL/admin/realms/$REALM/users/$serviceAccountId/role-mappings/realm" `
|
||||
-Method Post `
|
||||
-Headers $headers `
|
||||
-Body $roleBody
|
||||
|
||||
Write-Host "Rôle admin attribué au service account"
|
||||
}
|
||||
|
||||
Write-Host "Configuration terminée!"
|
||||
```
|
||||
|
||||
## Vérification
|
||||
|
||||
Après la configuration, vérifiez que :
|
||||
|
||||
1. Le client existe dans Keycloak
|
||||
2. Le secret correspond à celui dans `application-dev.properties`
|
||||
3. Le service account a les rôles nécessaires
|
||||
|
||||
## Redémarrer le serveur
|
||||
|
||||
Une fois le client configuré, redémarrez le serveur Quarkus :
|
||||
|
||||
```bash
|
||||
mvn quarkus:dev -pl lions-user-manager-server-impl-quarkus
|
||||
```
|
||||
|
||||
Le serveur devrait maintenant pouvoir s'authentifier auprès de Keycloak.
|
||||
|
||||
Reference in New Issue
Block a user