Lizenz
WorkTime Pro wird über einen zentralen Lizenzserver lizenziert, den der Hersteller betreibt. Die Anwendung beim Kunden prüft dort ihre Lizenz und bekommt ein signiertes Ergebnis zurück.
Die vollständige Anleitung samt Admin-Schnittstelle des Lizenzservers steht in docs/LICENSE-SERVER.md. Dieser Artikel beschreibt die Kundenseite.
Was in die .env gehört
LICENSE_KEY=WTPRO-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
LICENSE_SERVER_URL=https://license.example.com
LICENSE_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
INSTANCE_SALT=<zufälliger Wert je Installation>
Den öffentlichen Schlüssel liefert der Lizenzserver unter /api/public-key.
In einer Umgebungsvariablen steht ein PEM meist mit maskierten Zeilenumbrüchen (\n); die Anwendung setzt sie vor der Prüfung in echte Umbrüche zurück.
Die Stufen
| Stufe | Schlüssel | Enthaltene Module |
|---|---|---|
| BASIC | WTBAS-… | Zeiterfassung, Mitarbeiter, Berichte |
| PROFESSIONAL | WTPRO-… | zusätzlich ArbZG-Compliance, Rentabilität, Abteilungen, Standorte, Kostenstellen |
| ENTERPRISE | WTENT-… | zusätzlich Arbeitszeitmodelle, Schichten, API-Schlüssel, DSGVO-Modul, Prüfprotokoll |
Endpunkte eines nicht lizenzierten Moduls antworten mit 503.
Was geprüft wird — und was gilt
Maßgeblich ist der signierte Token, nicht der Rumpf der Antwort: Die JSON-Felder daneben sind ungeprüft und ließen sich unterwegs beliebig setzen. Der Token bindet außerdem die Instanz.
Ohne hinterlegten LICENSE_PUBLIC_KEY ist keine Prüfung möglich. Im Produktivbetrieb ist das ein Fehler und die Anwendung startet nicht — sonst genügte eine abgefangene oder umgeleitete Antwort, um sich jede Stufe zuzuweisen. Außerhalb des Betriebs bleibt es bei einer Warnung, damit Testaufbauten weiterlaufen.
Hardwarebindung
Bei der ersten Prüfung wird die Lizenz an einen Fingerabdruck der Instanz gebunden — aus Maschinenkennung, MAC-Adresse und INSTANCE_SALT. Ein Kopieren des Schlüssels auf einen zweiten Server schlägt fehl.
Deshalb bindet docker-compose.yml die Maschinenkennung des Wirts schreibgeschützt in den Container ein; ohne sie änderte sich der Fingerabdruck bei jedem Neustart.
Beim legitimen Serverwechsel löst der Hersteller die Bindung über die Admin-Schnittstelle. Die nächste Prüfung bindet die Lizenz an den neuen Server.
Offline-Toleranz
Die Anwendung prüft beim Start und danach täglich um drei Uhr. Ist der Lizenzserver nicht erreichbar, läuft sie bis zu sieben Tage mit der zuletzt zwischengespeicherten Lizenz weiter.
Eine Sperre wirkt entsprechend spätestens nach sieben Tagen.
Ohne Lizenz
| Lage | Verhalten |
|---|---|
NODE_ENV ≠ production, kein Schlüssel | Evaluierungsmodus, alle Module frei |
| Produktivbetrieb, kein Schlüssel | die API startet nicht |
| Lizenzserver nicht erreichbar | sieben Tage Weiterbetrieb aus dem Zwischenspeicher |
| abgelaufen, gesperrt, fremde Instanz | Modul-Endpunkte antworten mit 503 |
| Sitzobergrenze erreicht | weitere Mitarbeiter anzulegen wird abgelehnt |
Ein Platzhalter in LICENSE_KEY ist kein gangbarer Mittelweg: Die Prüfung schlägt dann fehl, und die API beendet sich beim Start mit „Lizenz ungültig oder abgelaufen“.
Den Stand ansehen
- In der Oberfläche: Berichte & System → Lizenz.
- Über die Schnittstelle:
GET /api/v1/license/status, ohne Anmeldung abrufbar.