# Script de test pour vérifier le token JWT Keycloak # Ce script obtient un token et le décode pour vérifier la présence des rôles $KEYCLOAK_URL = "http://localhost:8180" $REALM = "lions-user-manager" $CLIENT_ID = "lions-user-manager-client" $CLIENT_SECRET = "NTuaQpk5E6qiMqAWTFrCOcIkOABzZzKO" $USERNAME = "test-user" $PASSWORD = "test123" Write-Host "==========================================" -ForegroundColor Cyan Write-Host "Test Token JWT Keycloak" -ForegroundColor Cyan Write-Host "==========================================" -ForegroundColor Cyan Write-Host "" # 1. Obtenir un token Write-Host "1. Obtention du token..." -ForegroundColor Yellow $tokenParams = "username=$USERNAME&password=$PASSWORD&grant_type=password&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&scope=openid profile email roles" $tokenResponse = Invoke-RestMethod -Uri "$KEYCLOAK_URL/realms/$REALM/protocol/openid-connect/token" -Method Post -ContentType "application/x-www-form-urlencoded" -Body $tokenParams $ACCESS_TOKEN = $tokenResponse.access_token $ID_TOKEN = $tokenResponse.id_token if (-not $ACCESS_TOKEN) { Write-Host "ERREUR: Impossible d'obtenir le token" -ForegroundColor Red exit 1 } Write-Host "✓ Token obtenu" -ForegroundColor Green Write-Host "" # 2. Décoder le token (JWT = 3 parties séparées par des points) Write-Host "2. Décodage du token..." -ForegroundColor Yellow $tokenParts = $ACCESS_TOKEN -split '\.' if ($tokenParts.Count -ne 3) { Write-Host "ERREUR: Token JWT invalide (doit avoir 3 parties)" -ForegroundColor Red exit 1 } # Décoder le payload (2ème partie) $payload = $tokenParts[1] # Ajouter du padding si nécessaire (Base64URL) while ($payload.Length % 4) { $payload += "=" } $payload = $payload -replace '-', '+' -replace '_', '/' try { $bytes = [System.Convert]::FromBase64String($payload) $json = [System.Text.Encoding]::UTF8.GetString($bytes) $tokenData = $json | ConvertFrom-Json Write-Host "✓ Token décodé" -ForegroundColor Green Write-Host "" # 3. Afficher les informations du token Write-Host "3. Informations du token:" -ForegroundColor Yellow Write-Host " Username: $($tokenData.preferred_username)" -ForegroundColor Gray Write-Host " Email: $($tokenData.email)" -ForegroundColor Gray Write-Host " Subject: $($tokenData.sub)" -ForegroundColor Gray Write-Host "" # 4. Vérifier les rôles Write-Host "4. Vérification des rôles:" -ForegroundColor Yellow # Vérifier realm_access.roles if ($tokenData.realm_access) { if ($tokenData.realm_access.roles) { Write-Host " ✓ realm_access.roles trouvé:" -ForegroundColor Green $tokenData.realm_access.roles | ForEach-Object { Write-Host " - $_" -ForegroundColor Gray } } else { Write-Host " ✗ realm_access.roles non trouvé dans realm_access" -ForegroundColor Red } } else { Write-Host " ✗ realm_access non trouvé dans le token" -ForegroundColor Red } # Vérifier roles directement if ($tokenData.roles) { Write-Host " ✓ roles trouvé directement:" -ForegroundColor Green $tokenData.roles | ForEach-Object { Write-Host " - $_" -ForegroundColor Gray } } else { Write-Host " ✗ roles non trouvé directement dans le token" -ForegroundColor Yellow } Write-Host "" # 5. Afficher le token complet pour inspection Write-Host "5. Token complet (pour inspection sur jwt.io):" -ForegroundColor Yellow Write-Host $ACCESS_TOKEN -ForegroundColor Gray Write-Host "" # 6. Afficher le JSON complet Write-Host "6. Contenu complet du token (JSON):" -ForegroundColor Yellow $json | ConvertFrom-Json | ConvertTo-Json -Depth 10 | Write-Host -ForegroundColor Gray Write-Host "" } catch { Write-Host "ERREUR lors du décodage: $_" -ForegroundColor Red Write-Host "Payload brut: $payload" -ForegroundColor Gray } Write-Host "==========================================" -ForegroundColor Cyan Write-Host "Test terminé" -ForegroundColor Cyan Write-Host "==========================================" -ForegroundColor Cyan Write-Host "" Write-Host "Pour inspecter le token visuellement, allez sur https://jwt.io" -ForegroundColor Yellow Write-Host "et collez le token ci-dessus." -ForegroundColor Yellow Write-Host ""