docs: Update jwt docs [skip ci]
This commit is contained in:
@@ -1,100 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== JWT OAuth Client Setup ==="
|
||||
echo "Installing and configuring OIDC app for JWT tokens..."
|
||||
|
||||
# Wait for Nextcloud to be fully initialized
|
||||
sleep 5
|
||||
|
||||
# Install OIDC app if not already installed
|
||||
if ! php /var/www/html/occ app:list | grep -q "oidc"; then
|
||||
echo "Installing OIDC app..."
|
||||
php /var/www/html/occ app:install oidc
|
||||
else
|
||||
echo "OIDC app already installed"
|
||||
fi
|
||||
|
||||
# Enable the app
|
||||
php /var/www/html/occ app:enable oidc
|
||||
|
||||
# Check if JWT client already exists
|
||||
# Use a location that www-data user owns
|
||||
CLIENT_DIR="/var/www/html/.oauth-jwt"
|
||||
CLIENT_FILE="$CLIENT_DIR/nextcloud_oauth_client.json"
|
||||
|
||||
if [ -f "$CLIENT_FILE" ]; then
|
||||
echo "JWT OAuth client already exists at $CLIENT_FILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Create directory owned by www-data
|
||||
mkdir -p "$CLIENT_DIR"
|
||||
|
||||
# Create JWT OAuth client with proper scopes
|
||||
echo "Creating JWT OAuth client..."
|
||||
|
||||
# The redirect URI for the MCP server
|
||||
REDIRECT_URI="http://127.0.0.1:8002/oauth/callback"
|
||||
|
||||
# Create the client with JWT token type
|
||||
OUTPUT=$(php /var/www/html/occ oidc:create \
|
||||
--token_type=jwt \
|
||||
--allowed_scopes="openid profile email nc:read nc:write" \
|
||||
"Nextcloud MCP Server JWT" \
|
||||
"$REDIRECT_URI")
|
||||
|
||||
echo "Client creation output:"
|
||||
echo "$OUTPUT"
|
||||
|
||||
# Parse the JSON output to extract client_id, client_secret, and issued_at
|
||||
# Output format is JSON
|
||||
CLIENT_ID=$(echo "$OUTPUT" | grep '"client_id"' | sed 's/.*"client_id": "\([^"]*\)".*/\1/')
|
||||
CLIENT_SECRET=$(echo "$OUTPUT" | grep '"client_secret"' | sed 's/.*"client_secret": "\([^"]*\)".*/\1/')
|
||||
ISSUED_AT=$(echo "$OUTPUT" | grep '"issued_at"' | sed 's/.*"issued_at": \([0-9]*\).*/\1/')
|
||||
|
||||
if [ -z "$CLIENT_ID" ] || [ -z "$CLIENT_SECRET" ]; then
|
||||
echo "ERROR: Failed to parse client credentials from output"
|
||||
echo "Output was: $OUTPUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Use issued_at if available, otherwise use current timestamp
|
||||
if [ -z "$ISSUED_AT" ]; then
|
||||
ISSUED_AT=$(date +%s)
|
||||
fi
|
||||
|
||||
# Set expiration to 10 years in the future (JWT clients don't expire like DCR clients)
|
||||
EXPIRES_AT=$((ISSUED_AT + 315360000))
|
||||
|
||||
echo "Successfully created JWT client:"
|
||||
echo " Client ID: ${CLIENT_ID:0:16}..."
|
||||
echo " Client Secret: [hidden]"
|
||||
|
||||
# Create the credentials file in the format expected by the MCP server
|
||||
# This matches the format from ClientInfo.to_dict() in client_registration.py
|
||||
cat > "$CLIENT_FILE" << EOF
|
||||
{
|
||||
"client_id": "$CLIENT_ID",
|
||||
"client_secret": "$CLIENT_SECRET",
|
||||
"client_id_issued_at": $ISSUED_AT,
|
||||
"client_secret_expires_at": $EXPIRES_AT,
|
||||
"redirect_uris": ["$REDIRECT_URI"]
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "Credentials saved to $CLIENT_FILE"
|
||||
|
||||
# Also save to environment variable format for easy access
|
||||
cat > "$CLIENT_DIR/client_env.sh" << EOF
|
||||
export NEXTCLOUD_OIDC_CLIENT_ID="$CLIENT_ID"
|
||||
export NEXTCLOUD_OIDC_CLIENT_SECRET="$CLIENT_SECRET"
|
||||
export NEXTCLOUD_OIDC_SCOPES="openid profile email nc:read nc:write"
|
||||
EOF
|
||||
|
||||
chmod 600 "$CLIENT_DIR/client_env.sh"
|
||||
|
||||
echo "=== JWT OAuth Client Setup Complete ==="
|
||||
echo "Client credentials are available at:"
|
||||
echo " JSON: $CLIENT_FILE"
|
||||
echo " ENV: $CLIENT_DIR/client_env.sh"
|
||||
Reference in New Issue
Block a user