Den IP-Filter der neuen Rest API kann man umgehen, wenn man den Login ein bisschen anders als in der Rest-Dokumentation durchführt.
Nen kleines PoC:
Bash
#!/bin/bash
set -euo pipefail
TOKEN_URL="https://servercontrolpanel.de/realms/scp/protocol/openid-connect/token"
API_URL="https://servercontrolpanel.de/scp-core/api/v1/servers?limit=10"
read -p "SCP Benutzername/Kundennummer: " SCP_USER
read -s -p "SCP Passwort: " SCP_PASS
echo
echo "== Login =="
RESPONSE=$(curl -sS "$TOKEN_URL" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "client_id=scp" \
--data-urlencode "grant_type=password" \
--data-urlencode "username=$SCP_USER" \
--data-urlencode "password=$SCP_PASS" \
--data-urlencode "scope=openid")
if ! echo "$RESPONSE" | jq -e '.access_token' >/dev/null; then
echo "Login fehlgeschlagen:"
echo "$RESPONSE" | jq .
exit 1
fi
ACCESS_TOKEN=$(echo "$RESPONSE" | jq -r '.access_token')
REFRESH_TOKEN=$(echo "$RESPONSE" | jq -r '.refresh_token')
echo "✓ Login erfolgreich"
echo
echo "== Teste API =="
HTTP_CODE=$(curl -s \
-o response.json \
-w "%{http_code}" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json" \
"$API_URL")
echo "HTTP Status: $HTTP_CODE"
echo
if [[ "$HTTP_CODE" == "200" ]]; then
echo "✓ API erfolgreich aufgerufen"
echo
jq . response.json
else
echo "✗ API Fehler"
echo
cat response.json
fi
echo
echo "Access Token: ${ACCESS_TOKEN:0:20}..."
echo
echo "Refresh Token: ${REFRESH_TOKEN:0:20}..."
Alles anzeigen
Ich verstehe ehrlich gesagt nicht, welchen Zweck der IP-Filter erfüllen soll.
Für den REST-Login werden schließlich dieselben Zugangsdaten (Benutzername und Passwort) wie für das SCP verwendet.
Wer diese Zugangsdaten besitzt, kann sich ohnehin direkt im SCP anmelden und dort sämtliche Aktionen durchführen – ganz unabhängig von diesem IP-Filter.
Außer ich gebe in einer Anwendung nur den Access / Refresh Token ein, dann würde es wiederum Sinn machen.