149 lines
5.6 KiB
Bash
149 lines
5.6 KiB
Bash
#!/bin/bash
|
|
|
|
# Script de test de la configuration Keycloak pour lions-user-manager
|
|
# Usage: ./test-keycloak-config.sh
|
|
|
|
set -e
|
|
|
|
KEYCLOAK_URL="http://localhost:8180"
|
|
REALM="lions-user-manager"
|
|
CLIENT_ID="lions-user-manager-client"
|
|
CLIENT_SECRET="NTuaQpk5E6qiMqAWTFrCOcIkOABzZzKO"
|
|
USERNAME="testadmin"
|
|
PASSWORD="admin123"
|
|
BACKEND_URL="http://localhost:8081"
|
|
|
|
echo "=========================================="
|
|
echo "Test de configuration Keycloak"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Test 1: Vérifier que Keycloak est accessible
|
|
echo "[1/4] Vérification de l'accès à Keycloak..."
|
|
if curl -s -f "$KEYCLOAK_URL" > /dev/null 2>&1; then
|
|
echo "✅ Keycloak est accessible sur $KEYCLOAK_URL"
|
|
else
|
|
echo "❌ Keycloak n'est pas accessible sur $KEYCLOAK_URL"
|
|
echo " Assurez-vous que Keycloak est démarré."
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Test 2: Obtenir un token
|
|
echo "[2/4] Obtention d'un token d'accès..."
|
|
TOKEN_RESPONSE=$(curl -s -X POST \
|
|
"$KEYCLOAK_URL/realms/$REALM/protocol/openid-connect/token" \
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|
-d "client_id=$CLIENT_ID" \
|
|
-d "client_secret=$CLIENT_SECRET" \
|
|
-d "grant_type=password" \
|
|
-d "username=$USERNAME" \
|
|
-d "password=$PASSWORD" \
|
|
-d "scope=openid profile email roles")
|
|
|
|
if echo "$TOKEN_RESPONSE" | grep -q "access_token"; then
|
|
ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)
|
|
echo "✅ Token obtenu avec succès"
|
|
echo " Token (premiers 50 caractères): ${ACCESS_TOKEN:0:50}..."
|
|
else
|
|
echo "❌ Impossible d'obtenir un token"
|
|
echo " Réponse de Keycloak:"
|
|
echo "$TOKEN_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$TOKEN_RESPONSE"
|
|
echo ""
|
|
echo "Vérifiez que:"
|
|
echo " - Le realm '$REALM' existe"
|
|
echo " - Le client '$CLIENT_ID' existe avec le bon secret"
|
|
echo " - L'utilisateur '$USERNAME' existe avec le mot de passe '$PASSWORD'"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Test 3: Vérifier le contenu du token
|
|
echo "[3/4] Vérification du contenu du token..."
|
|
TOKEN_PAYLOAD=$(echo "$ACCESS_TOKEN" | cut -d'.' -f2)
|
|
# Ajouter le padding si nécessaire pour base64
|
|
TOKEN_PAYLOAD_PADDED=$(echo "$TOKEN_PAYLOAD" | awk '{while(length($0) % 4 != 0) $0 = $0 "="; print}')
|
|
TOKEN_DECODED=$(echo "$TOKEN_PAYLOAD_PADDED" | base64 -d 2>/dev/null || echo "{}")
|
|
|
|
echo "$TOKEN_DECODED" | python3 -m json.tool > /tmp/token_decoded.json 2>/dev/null || echo "$TOKEN_DECODED" > /tmp/token_decoded.json
|
|
|
|
if grep -q "realm_access" /tmp/token_decoded.json; then
|
|
echo "✅ Le token contient les rôles (realm_access)"
|
|
ROLES=$(cat /tmp/token_decoded.json | grep -A 10 "realm_access" | grep -A 5 "roles" || echo "[]")
|
|
echo " Rôles trouvés: $ROLES"
|
|
else
|
|
echo "❌ Le token ne contient pas realm_access.roles"
|
|
echo " Vérifiez la configuration du client scope 'roles' dans Keycloak"
|
|
fi
|
|
|
|
if grep -q "\"admin\"" /tmp/token_decoded.json || grep -q "\"user_manager\"" /tmp/token_decoded.json; then
|
|
echo "✅ L'utilisateur a le rôle 'admin' ou 'user_manager'"
|
|
else
|
|
echo "⚠️ L'utilisateur n'a pas le rôle 'admin' ou 'user_manager'"
|
|
echo " L'endpoint /api/users/search nécessite un de ces rôles"
|
|
echo " Assignez le rôle 'admin' ou 'user_manager' à l'utilisateur '$USERNAME'"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 4: Tester l'API backend
|
|
echo "[4/4] Test de l'endpoint /api/users/search..."
|
|
API_RESPONSE=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST \
|
|
"$BACKEND_URL/api/users/search" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
|
-d '{
|
|
"realmName": "'"$REALM"'",
|
|
"page": 0,
|
|
"pageSize": 20
|
|
}' 2>/dev/null)
|
|
|
|
HTTP_CODE=$(echo "$API_RESPONSE" | grep "HTTP_CODE:" | cut -d':' -f2)
|
|
RESPONSE_BODY=$(echo "$API_RESPONSE" | sed '/HTTP_CODE:/d')
|
|
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ Endpoint /api/users/search accessible (HTTP 200)"
|
|
echo " Nombre d'utilisateurs trouvés: $(echo "$RESPONSE_BODY" | grep -o '"totalCount":[0-9]*' | cut -d':' -f2 || echo "?")"
|
|
elif [ "$HTTP_CODE" = "000" ] || [ -z "$HTTP_CODE" ]; then
|
|
echo "❌ Le backend n'est pas accessible sur $BACKEND_URL"
|
|
echo " Assurez-vous que lions-user-manager-server est démarré (mvn quarkus:dev)"
|
|
elif [ "$HTTP_CODE" = "401" ]; then
|
|
echo "❌ Erreur 401 Unauthorized"
|
|
echo " Le token n'est pas accepté par le backend"
|
|
echo " Vérifiez que le serveur utilise le même realm dans application.properties"
|
|
elif [ "$HTTP_CODE" = "403" ]; then
|
|
echo "❌ Erreur 403 Forbidden"
|
|
echo " L'utilisateur n'a pas les permissions nécessaires"
|
|
echo " Assignez le rôle 'admin' ou 'user_manager' à l'utilisateur"
|
|
elif [ "$HTTP_CODE" = "405" ]; then
|
|
echo "❌ Erreur 405 Method Not Allowed"
|
|
echo " C'est l'erreur que vous rencontriez !"
|
|
echo " Vérifiez que le serveur backend est bien configuré avec le realm '$REALM'"
|
|
else
|
|
echo "⚠️ Réponse HTTP $HTTP_CODE"
|
|
echo " Réponse: $RESPONSE_BODY"
|
|
fi
|
|
echo ""
|
|
|
|
# Résumé
|
|
echo "=========================================="
|
|
echo "Résumé du test"
|
|
echo "=========================================="
|
|
echo ""
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "🎉 Configuration correcte ! Tout fonctionne."
|
|
echo ""
|
|
echo "Vous pouvez maintenant:"
|
|
echo " 1. Démarrer le client: cd lions-user-manager-client-quarkus-primefaces-freya && mvn quarkus:dev"
|
|
echo " 2. Accéder à: http://localhost:8082"
|
|
echo " 3. Se connecter avec: $USERNAME / $PASSWORD"
|
|
echo " 4. Naviguer vers: /pages/user-manager/users/list.xhtml"
|
|
else
|
|
echo "❌ La configuration nécessite des ajustements."
|
|
echo ""
|
|
echo "Consultez le fichier KEYCLOAK_DEV_SETUP.md pour les instructions complètes."
|
|
fi
|
|
echo ""
|
|
|
|
# Cleanup
|
|
rm -f /tmp/token_decoded.json
|