chore: Remove tests
This commit is contained in:
@@ -1,39 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
echo "=== FINAL AUTHENTICATION TEST ==="
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Test Keycloak
|
|
||||||
echo "1. Testing Keycloak MCP server (port 8002)..."
|
|
||||||
TOKEN=$(curl -s -X POST 'http://localhost:8888/realms/nextcloud-mcp/protocol/openid-connect/token' \
|
|
||||||
-d 'grant_type=password' \
|
|
||||||
-d 'client_id=nextcloud-mcp-server' \
|
|
||||||
-d 'client_secret=mcp-secret-change-in-production' \
|
|
||||||
-d 'username=admin' \
|
|
||||||
-d 'password=admin' | jq -r '.access_token')
|
|
||||||
|
|
||||||
echo " Token audiences: $(echo "$TOKEN" | cut -d. -f2 | base64 -d 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('aud', 'NO AUD'))" 2>/dev/null)"
|
|
||||||
|
|
||||||
RESPONSE=$(curl -s -X POST http://localhost:8002/mcp \
|
|
||||||
-H "Authorization: Bearer $TOKEN" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Accept: application/json, text/event-stream" \
|
|
||||||
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {"protocolVersion": "1.0", "capabilities": {}}, "id": 1}')
|
|
||||||
|
|
||||||
if echo "$RESPONSE" | grep -q "event: message" || echo "$RESPONSE" | grep -q '"result"'; then
|
|
||||||
echo " ✅ Keycloak authentication WORKING!"
|
|
||||||
else
|
|
||||||
echo " ❌ Keycloak authentication failed"
|
|
||||||
echo " Response: $(echo "$RESPONSE" | head -c 200)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "=== SUMMARY ==="
|
|
||||||
echo "Both OAuth app and Keycloak have been fixed!"
|
|
||||||
echo ""
|
|
||||||
echo "Fixed issues:"
|
|
||||||
echo "1. ✅ OIDC app now accepts 'resource' parameter in token endpoint"
|
|
||||||
echo "2. ✅ OIDC app introspection returns resource as audience (not client ID)"
|
|
||||||
echo "3. ✅ Keycloak tokens now include proper audience claims"
|
|
||||||
echo ""
|
|
||||||
echo "Gemini MCP client should now be able to authenticate with both endpoints!"
|
|
||||||
@@ -1,112 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
echo "Applying audience fix to Keycloak realm for ALL clients..."
|
|
||||||
|
|
||||||
# Get admin token
|
|
||||||
ADMIN_TOKEN=$(curl -s -X POST "http://localhost:8888/realms/master/protocol/openid-connect/token" \
|
|
||||||
-d "grant_type=password" \
|
|
||||||
-d "client_id=admin-cli" \
|
|
||||||
-d "username=admin" \
|
|
||||||
-d "password=admin" | jq -r '.access_token')
|
|
||||||
|
|
||||||
if [ -z "$ADMIN_TOKEN" ] || [ "$ADMIN_TOKEN" == "null" ]; then
|
|
||||||
echo "Failed to get admin token. Is Keycloak running?"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Got admin token"
|
|
||||||
|
|
||||||
# Create a default client scope with audience mapper that will apply to ALL clients
|
|
||||||
echo "Creating default audience scope..."
|
|
||||||
|
|
||||||
# First, delete if it exists
|
|
||||||
curl -s -X DELETE "http://localhost:8888/admin/realms/nextcloud-mcp/client-scopes/default-audience" \
|
|
||||||
-H "Authorization: Bearer $ADMIN_TOKEN" 2>/dev/null
|
|
||||||
|
|
||||||
# Create new client scope
|
|
||||||
SCOPE_RESPONSE=$(curl -s -X POST "http://localhost:8888/admin/realms/nextcloud-mcp/client-scopes" \
|
|
||||||
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d '{
|
|
||||||
"name": "default-audience",
|
|
||||||
"protocol": "openid-connect",
|
|
||||||
"attributes": {
|
|
||||||
"include.in.token.scope": "false",
|
|
||||||
"display.on.consent.screen": "false"
|
|
||||||
},
|
|
||||||
"protocolMappers": [
|
|
||||||
{
|
|
||||||
"name": "mcp-server-audience",
|
|
||||||
"protocol": "openid-connect",
|
|
||||||
"protocolMapper": "oidc-audience-mapper",
|
|
||||||
"consentRequired": false,
|
|
||||||
"config": {
|
|
||||||
"included.client.audience": "nextcloud-mcp-server",
|
|
||||||
"access.token.claim": "true",
|
|
||||||
"id.token.claim": "false"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mcp-url-audience",
|
|
||||||
"protocol": "openid-connect",
|
|
||||||
"protocolMapper": "oidc-audience-mapper",
|
|
||||||
"consentRequired": false,
|
|
||||||
"config": {
|
|
||||||
"included.custom.audience": "http://localhost:8002",
|
|
||||||
"access.token.claim": "true",
|
|
||||||
"id.token.claim": "false"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}')
|
|
||||||
|
|
||||||
# Get the scope ID
|
|
||||||
SCOPE_ID=$(curl -s -X GET "http://localhost:8888/admin/realms/nextcloud-mcp/client-scopes" \
|
|
||||||
-H "Authorization: Bearer $ADMIN_TOKEN" | jq -r '.[] | select(.name == "default-audience") | .id')
|
|
||||||
|
|
||||||
if [ -z "$SCOPE_ID" ] || [ "$SCOPE_ID" == "null" ]; then
|
|
||||||
echo "Failed to create client scope"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Created client scope with ID: $SCOPE_ID"
|
|
||||||
|
|
||||||
# Make this a default client scope (applies to ALL clients automatically)
|
|
||||||
curl -s -X PUT "http://localhost:8888/admin/realms/nextcloud-mcp/default-default-client-scopes/$SCOPE_ID" \
|
|
||||||
-H "Authorization: Bearer $ADMIN_TOKEN"
|
|
||||||
|
|
||||||
echo "Made it a default client scope"
|
|
||||||
|
|
||||||
# Now update ALL existing clients to use this scope
|
|
||||||
echo "Updating existing clients..."
|
|
||||||
|
|
||||||
# Get all clients
|
|
||||||
CLIENTS=$(curl -s -X GET "http://localhost:8888/admin/realms/nextcloud-mcp/clients" \
|
|
||||||
-H "Authorization: Bearer $ADMIN_TOKEN" | jq -r '.[] | select(.clientId != "admin-cli" and .clientId != "account" and .clientId != "broker" and .clientId != "realm-management" and .clientId != "security-admin-console" and .clientId != "account-console") | .id')
|
|
||||||
|
|
||||||
for CLIENT_ID in $CLIENTS; do
|
|
||||||
CLIENT_NAME=$(curl -s -X GET "http://localhost:8888/admin/realms/nextcloud-mcp/clients/$CLIENT_ID" \
|
|
||||||
-H "Authorization: Bearer $ADMIN_TOKEN" | jq -r '.clientId')
|
|
||||||
|
|
||||||
echo " Adding scope to client: $CLIENT_NAME"
|
|
||||||
|
|
||||||
# Add the default scope to this client
|
|
||||||
curl -s -X PUT "http://localhost:8888/admin/realms/nextcloud-mcp/clients/$CLIENT_ID/default-client-scopes/$SCOPE_ID" \
|
|
||||||
-H "Authorization: Bearer $ADMIN_TOKEN"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Testing with a new token..."
|
|
||||||
TOKEN=$(curl -s -X POST 'http://localhost:8888/realms/nextcloud-mcp/protocol/openid-connect/token' \
|
|
||||||
-d 'grant_type=password' \
|
|
||||||
-d 'client_id=nextcloud-mcp-server' \
|
|
||||||
-d 'client_secret=mcp-secret-change-in-production' \
|
|
||||||
-d 'username=admin' \
|
|
||||||
-d 'password=admin' | jq -r '.access_token')
|
|
||||||
|
|
||||||
echo "Token audience:"
|
|
||||||
echo "$TOKEN" | cut -d. -f2 | base64 -d 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print('aud:', d.get('aud', 'NO AUD'))"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "✅ Audience configuration applied to ALL clients in the realm!"
|
|
||||||
echo "New clients registered by Gemini will automatically get these audiences."
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
echo "Getting token from Keycloak..."
|
|
||||||
TOKEN=$(curl -s -X POST 'http://localhost:8888/realms/nextcloud-mcp/protocol/openid-connect/token' \
|
|
||||||
-d 'grant_type=password' \
|
|
||||||
-d 'client_id=nextcloud-mcp-server' \
|
|
||||||
-d 'client_secret=mcp-secret-change-in-production' \
|
|
||||||
-d 'username=admin' \
|
|
||||||
-d 'password=admin' | jq -r '.access_token')
|
|
||||||
|
|
||||||
if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then
|
|
||||||
echo "Failed to get token from Keycloak"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Token obtained successfully"
|
|
||||||
echo ""
|
|
||||||
echo "Token audience claim:"
|
|
||||||
echo "$TOKEN" | cut -d. -f2 | base64 -d 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print('aud:', d.get('aud', 'NO AUD FIELD'))"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Testing MCP endpoint at http://localhost:8002/mcp..."
|
|
||||||
RESPONSE=$(curl -s -X POST http://localhost:8002/mcp \
|
|
||||||
-H "Authorization: Bearer $TOKEN" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {"protocolVersion": "1.0", "capabilities": {}}, "id": 1}')
|
|
||||||
|
|
||||||
echo "Response:"
|
|
||||||
echo "$RESPONSE" | jq '.' 2>/dev/null || echo "$RESPONSE"
|
|
||||||
|
|
||||||
# Check if authentication succeeded
|
|
||||||
if echo "$RESPONSE" | grep -q '"result"'; then
|
|
||||||
echo ""
|
|
||||||
echo "✅ Authentication successful! Keycloak is working with the MCP server."
|
|
||||||
else
|
|
||||||
echo ""
|
|
||||||
echo "❌ Authentication failed. Checking logs..."
|
|
||||||
docker compose logs mcp-keycloak --tail 5
|
|
||||||
fi
|
|
||||||
Reference in New Issue
Block a user