Das API Key Wildcard Plugin stellt einen separaten API-Endpoint (/api/wildcard/tickets.json) bereit, der es API-Keys mit der IP-Adresse 0.0.0.0 erlaubt, Anfragen von jeder IP-Adresse zu akzeptieren.
Das löst ein häufiges Entwicklungsproblem: osTickets native API erfordert eine spezifische IP-Adresse für jeden API-Key. Das ist sicher für Produktivumgebungen, aber umständlich während der Entwicklung, wenn sich deine IP-Adresse häufig ändert (dynamische IP, Arbeiten von verschiedenen Standorten, CI/CD-Pipelines).
WICHTIG: Verwende Wildcard-API-Keys (0.0.0.0) nur in Entwicklungsumgebungen!
In Produktivumgebungen sollten API-Keys aus Sicherheitsgründen immer an spezifische IP-Adressen gebunden sein.
Warum das wichtig ist:
0.0.0.0 akzeptieren Anfragen von JEDER IP-Adresse weltweitSichere Verwendung:
| Anforderung | Version | Hinweise |
|---|---|---|
| osTicket | 1.18.x | Plugin nutzt osTickets native API-Infrastruktur |
| PHP | 7.4+ | Empfohlen: PHP 8.1+ für beste Performance |
| Webserver | Apache oder NGINX | Apache benötigt mod_rewrite aktiviert |
| Dateiberechtigungen | Schreibzugriff auf /api/ |
Erforderlich für automatische Installation |
api-key-wildcard-Ordner nach /include/plugins/ auf deinem osTicket-Server hochFinaler Pfad: /pfad/zu/osticket/include/plugins/api-key-wildcard/
cd /pfad/zu/osticket/include/plugins
git clone https://github.com/markus-michalski/osticket-api-key-wildcard.git
Was automatisch passiert:
wildcard.php ins /api/-Verzeichnis/api/.htaccess mit erforderlichen Rewrite-RulesKeine manuelle Konfiguration nötig!
0.0.0.0Wichtig: Der API-Key MUSS die IP 0.0.0.0 haben, um mit dem Wildcard-Endpoint zu funktionieren!
Falls die automatische Installation fehlschlägt (z.B. wegen Dateiberechtigungen):
Wildcard-Endpoint kopieren:
cp /pfad/zu/osticket/include/plugins/api-key-wildcard/wildcard.php \
/pfad/zu/osticket/api/wildcard.php
chmod 755 /pfad/zu/osticket/api/wildcard.php
/api/.htaccess aktualisieren - Füge diese Zeilen nach RewriteEngine On hinzu:
# Disable MultiViews for wildcard endpoint (prevents mod_negotiation)
Options -MultiViews
# Wildcard API endpoint (must come BEFORE the default rule)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wildcard/(.*)$ wildcard.php/$1 [L]
Berechtigungen prüfen:
chmod 755 /pfad/zu/osticket/api/wildcard.php
chmod 644 /pfad/zu/osticket/api/.htaccess
Falls du NGINX verwendest, füge dies manuell zu deinem Server-Block hinzu:
# osTicket API Key Wildcard Plugin
location ~ ^/api/wildcard/ {
rewrite ^/api/wildcard/(.*)$ /api/wildcard.php/$1 last;
}
# Pass PHP requests to PHP-FPM
location ~ ^/api/wildcard\.php {
fastcgi_split_path_info ^(/api/wildcard\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php-fpm.sock; # An deinen PHP-FPM-Socket anpassen
}
Nach dem Hinzufügen:
sudo nginx -tsudo systemctl reload nginx| Feature | Standard-API | Wildcard-API |
|---|---|---|
| Endpoint | /api/tickets.json |
/api/wildcard/tickets.json |
| IP-Beschränkung | Spezifische IP erforderlich | Jede IP (wenn API-Key 0.0.0.0 ist) |
| Sicherheit | Hoch (produktionsbereit) | Niedrig (nur Entwicklung) |
| Anwendungsfall | Produktion | Entwicklung/Tests |
curl -X POST \
-H "X-API-Key: DEIN_API_KEY_HIER" \
-H "Content-Type: application/json" \
-d '{
"name": "Test User",
"email": "test@example.com",
"subject": "Test Ticket",
"message": "Das ist eine Testnachricht"
}' \
http://localhost/osTicket/api/wildcard/tickets.json
Wichtig:
/api/wildcard/tickets.json (NICHT /api/tickets.json)0.0.0.0 gesetzt seinAlle Standard-osTicket-API-Endpoints funktionieren über Wildcard:
| Standard-Endpoint | Wildcard-Endpoint |
|---|---|
/api/tickets.json |
/api/wildcard/tickets.json |
/api/tickets/:id.json |
/api/wildcard/tickets/:id.json |
Hinweis: Funktioniert auch mit erweiterten API-Endpoints von anderen Plugins!
Symptome: Plugin aktiviert, aber Wildcard-Endpoint funktioniert nicht
Prüfen:
ls /pfad/zu/osticket/api/wildcard.phptail -f /var/log/apache2/error.logLösung: Manuelle Installation verwenden (siehe Installationsabschnitt oben)
Symptome: Anfrage an Wildcard-Endpoint gibt 401 zurück
Mögliche Ursachen:
API-Key nicht auf 0.0.0.0 gesetzt
0.0.0.0 setzenFalscher Endpoint verwendet
/api/wildcard/tickets.json (NICHT /api/tickets.json)API-Key deaktiviert
Fehlender X-API-Key-Header
X-API-Key: DEIN_KEYSymptome: /api/wildcard/tickets.json gibt 404 zurück
Mögliche Ursachen:
wildcard.php nicht ins /api/-Verzeichnis kopiert
ls /pfad/zu/osticket/api/wildcard.php
Lösung: Plugin deaktivieren/aktivieren um Installation auszulösen, oder manuell kopieren
.htaccess-Rewrite-Rule fehlt
cat /pfad/zu/osticket/api/.htaccess | grep wildcard
Lösung: Rewrite-Rule manuell hinzufügen (siehe Installationsabschnitt)
mod_rewrite nicht aktiviert (Apache)
apache2ctl -M | grep rewrite
Lösung:
sudo a2enmod rewrite
sudo systemctl restart apache2
MultiViews verursacht Probleme (Apache)
Lösung: Stelle sicher, dass .htaccess Options -MultiViews VOR den Rewrite-Rules enthält
Symptome: Plugin-Dateien aktualisiert, aber wildcard.php in /api/ ist noch alte Version
Lösung:
# Für PHP-FPM
sudo systemctl reload php8.1-fpm
# Für Apache mod_php
sudo systemctl reload apache2
┌─────────────────────────────────────┐
│ Client (beliebige IP) │
├─────────────────────────────────────┤
│ HTTP-Request │
│ POST /api/wildcard/tickets.json │
│ X-API-Key: DEIN_KEY_MIT_0.0.0.0 │
├─────────────────────────────────────┤
│ Apache mod_rewrite / NGINX │
│ .htaccess: ^wildcard/(.*)$ │
│ → wildcard.php/$1 │
├─────────────────────────────────────┤
│ wildcard.php │
│ - Prüft ob API-Key IP 0.0.0.0 hat │
│ - Falls ja: Anfrage erlauben │
│ - Falls nein: Ablehnen (401) │
├─────────────────────────────────────┤
│ osTicket API-Verarbeitung │
│ (Standard-Ticket-Erstellungslogik) │
└─────────────────────────────────────┘
api-key-wildcard/
├── plugin.php # Plugin-Registrierung
├── class.ApiKeyWildcard.php # Haupt-Plugin-Klasse
├── wildcard.php # API-Endpoint (wird nach /api/ kopiert)
├── api.wildcard.inc.php # API-Implementierungslogik
└── CHANGELOG.md # Versionshistorie
Das Plugin verwendet osTickets enable()-Hook:
/api/wildcard.php existiert.htaccess Wildcard-Rule enthältPlugin verfolgt installierte Versionen für automatische Updates:
# In .htaccess:
# API Key Wildcard Plugin v1.0.0
Beim Plugin-Aktivieren:
.htaccess-Kommentar extrahierenStandard-API (/api/tickets.json):
// Prüft IP-Adresse gegen API-Key-Konfiguration
if ($api_key->getIpAddr() !== $_SERVER['REMOTE_ADDR']) {
return 401 Unauthorized;
}
Wildcard-API (/api/wildcard/tickets.json):
// Erlaubt nur API-Keys mit 0.0.0.0
if ($api_key->getIpAddr() !== '0.0.0.0') {
return 401 Unauthorized; // Muss Standard-API verwenden
}
// Überspringe IP-Prüfung für 0.0.0.0-Keys
NIEMALS Wildcard-API-Keys (0.0.0.0) verwenden in:
Sicher, Wildcard-API-Keys zu verwenden in:
Was mit Wildcard-Keys schiefgehen könnte:
Geleakter API-Key
.env-Dateien committen, .gitignore verwendenBrute-Force-Angriffe
Interne Bedrohung
Falls du Wildcard-Keys verwendest, füge Schutz hinzu:
Erstelle verschiedene API-Keys für verschiedene Zwecke:
Produktiv-API-Key:
203.0.113.42 (dein Produktivserver)/api/tickets.jsonEntwicklungs-API-Key:
0.0.0.0 (Wildcard)/api/wildcard/tickets.jsonEmpfohlener Workflow:
Lokale Entwicklung
API_KEY=wildcard-dev-key-12345
ENDPOINT=http://localhost/osTicket/api/wildcard/tickets.json
Staging-Umgebung
# Wildcard falls hinter Firewall
# ODER spezifische IP falls öffentlich zugänglich
API_KEY=wildcard-staging-key-67890
ENDPOINT=https://staging.example.com/api/wildcard/tickets.json
Produktivumgebung
# IMMER spezifische IP für Produktion verwenden
API_KEY=production-key-specific-ip
ENDPOINT=https://tickets.example.com/api/tickets.json # Standard-Endpoint!
Best Practice für Teams:
Jeder Entwickler erhält seinen eigenen Wildcard-API-Key
API-Keys aussagekräftig benennen
Dev-John-Wildcard-Key
Dev-Jane-Wildcard-Key
Dev-Bob-Wildcard-Key
API-Keys regelmäßig rotieren
# Alle 30-90 Tage
1. Neuen API-Key mit 0.0.0.0 erstellen
2. Anwendungen aktualisieren
3. Alten API-Key löschen
Vor Deployment in Produktion:
# Wildcard-Plugin deaktivieren
Admin Panel → Verwalten → Plugins → API Key Wildcard → Deaktivieren
# Standard-API mit spezifischen IPs verwenden
Admin Panel → Verwalten → API-Schlüssel → IP auf spezifische Adresse aktualisieren
F: Modifiziert dieses Plugin osTicket Core-Dateien?
A: Nein! Das Plugin erstellt einen separaten Endpoint und modifiziert KEINE osTicket-Core-Dateien. Standard-API bleibt unverändert und sicher.
F: Kann ich beide Endpoints gleichzeitig verwenden?
A: Ja! Standard-API für Produktiv-Integrationen (strikte IP), Wildcard-API für Entwicklung (flexible IP).
F: Funktioniert das mit osTicket 1.17 oder älter?
A: Nicht getestet. Das Plugin ist für osTicket 1.18.x konzipiert. Es funktioniert möglicherweise mit 1.17, aber Kompatibilität ist nicht garantiert.
F: Ist es kompatibel mit PHP 8.x?
A: Ja! Das Plugin ist getestet mit PHP 7.4, 8.0, 8.1, 8.2 und 8.3.
F: Funktioniert das mit NGINX?
A: Ja, aber benötigt manuelle Konfiguration (siehe Installationsabschnitt). Apache-Setup ist automatisch.
F: Kann ich das mit dem API Endpoints Plugin nutzen?
A: Ja! Alle erweiterten API-Endpoints funktionieren auch über den Wildcard-Endpoint.
F: Ist das sicher für Produktion?
A: NEIN! Verwende Wildcard-API-Keys (0.0.0.0) nur in Entwicklungs-/Testumgebungen. Produktion sollte immer spezifische IP-Adressen verwenden.
F: Was passiert, wenn mein Wildcard-API-Key geleakt wird?
A: Jeder mit dem Key kann von überall Tickets erstellen. Sofort:
F: Kann ich Wildcard-Keys auf spezifische IP-Bereiche beschränken?
A: Aktuell nicht. Das Plugin unterstützt nur 0.0.0.0 (alle IPs). Für IP-Bereiche verwende den Standard-API-Endpoint.
Dieses Plugin wird unter der GNU General Public License v2 veröffentlicht, kompatibel mit osTicket Core.
Details siehe LICENSE.
Für Fragen oder Probleme erstelle bitte ein Issue auf GitHub:
Issue Tracker: https://github.com/markus-michalski/osticket-api-key-wildcard/issues
Beim Melden von Problemen bitte angeben:
php -v)Entwickelt von Markus Michalski
Beiträge willkommen!
Ideen für Beiträge:
192.168.1.0/24)Siehe CHANGELOG.md für Versionshistorie.