Skip to content

Self-Hosting

Ihr Produkt mit Ihrer Instanz verbinden

Machen Sie Self-Hosting wirksam: Richten Sie die Apps Ihrer Kunden auf Ihre eigene Keyright-Instanz aus. Produkt anlegen, seinen Signaturschlüssel erzeugen, den öffentlichen Schlüssel und Ihre Basis-URL im SDK einbetten, eine Lizenz ausstellen und aktivieren — dieselben SDKs wie beim gehosteten Keyright, nur mit Ihrem Produktschlüssel und Ihrer URL.

Dies ist der Schritt, der Self-Hosting wirksam macht: Die Apps Ihrer Kunden müssen sich gegen Ihre Keyright-Instanz lizenzieren, nicht gegen unsere. Die SDKs (NuGet, npm, PyPI, Maven) sind dieselben, die die Integrationsleitfäden für das gehostete Keyright beschreiben — nichts ist fest auf einen Delta1-Endpunkt verdrahtet. Der gesamte Rundgang läuft gegen Ihre Instanz; unten steht $BASE für Ihre Basis-URL (aus Bereitstellen → Prüfen) und $TOKEN für Ihr KEYRIGHT_ADMIN_TOKEN.

Schritt 1 — Das Produkt anlegen

Produkte existieren erst, wenn Sie sie anlegen (der Signaturschlüssel-Aufruf in Schritt 2 liefert andernfalls 404). Im Dashboard (Products → Add product) oder über die API:

curl -X POST -H "X-Admin-Token: $TOKEN" -H "content-type: application/json" \
     $BASE/admin/products -d '{"name":"Acme App","slug":"acme-app"}'

Schritt 2 — Den Signaturschlüssel des Produkts erzeugen

Das ist der Schlüssel, der acme-app-Lizenzen signiert; betten Sie seine öffentliche Hälfte in Ihre App ein.

curl -X POST -H "X-Admin-Token: $TOKEN" $BASE/admin/products/acme-app/signing-key
# -> { "signingPublicKey": "MIIBIjANBgkq...", "rotated": false, ... }

Der private Schlüssel wird erzeugt und in Ihrer Datenbank, KEK-verschlüsselt gespeichert — er verlässt Ihre Instanz nie. Kopieren Sie den zurückgegebenen öffentlichen Schlüssel. (Alternativ verwenden Sie über KEYRIGHT_SIGNING_KEY einen mandantenweiten Schlüssel und betten GET $BASE/admin/public-key ein — ein produktspezifischer Schlüssel ist aber die einfachste, eindeutige Wahl.)

Schritt 3 — Diesen öffentlichen Schlüssel in Ihre App einbetten

Über das SDK — das prüft Lizenzen offline, ohne jeden Aufruf an Ihren Server:

RuntimeOptionWert
.NET (Keyright.NET)PublicKeyBase64der öffentliche Schlüssel Ihres Produkts (Schritt 2)
Node (keyright)publicKeyBase64der öffentliche Schlüssel Ihres Produkts
Python (keyright)public_key_base64der öffentliche Schlüssel Ihres Produkts
Java (com.delta1labs:keyright)publicKeyBase64der öffentliche Schlüssel Ihres Produkts

Schritt 4 — Das SDK auf Ihre Instanz ausrichten

Für Online-Aktivierung/-Validierung/-Metering — setzen Sie die Service-URL auf die Basis-URL Ihrer Instanz ($BASE):

RuntimeOptionWert
.NETServiceUrlhttps://licensing.acme.example
NodeserviceUrlhttps://licensing.acme.example
Pythonservice_urlhttps://licensing.acme.example
JavaserviceUrlhttps://licensing.acme.example

.NET-Beispiel (Node, Python und Java sind bis auf die Benennung identisch — siehe deren Integrationsleitfäden; für einen Self-Service-Testschlüssel ruft Ihre App POST <base>/v1/trial direkt auf, was den Schlüssel per E-Mail an den Kunden sendet — der ihn dann eingibt, und Ihre App aktiviert ihn wie jeden bezahlten Schlüssel):

using Keyright.Client;

static readonly KeyrightClient License = KeyrightClient.Initialize(new KeyrightOptions
{
    Product         = "acme-app",                        // Ihr Produkt-Slug auf Ihrer Instanz
    PublicKeyBase64 = "MIIBIjANBgkq...",                 // der öffentliche Schlüssel Ihres Produkts (Schritt 2)
    ServiceUrl      = "https://licensing.acme.example",  // Basis-URL Ihrer Instanz (Schritt 4); weglassen, wenn nur offline
});

Schritt 5 — Eine Lizenz an einen Kunden ausstellen

Definieren Sie optional ein Tier (eine Platzanzahl + Entitlement-Vorlage) und stellen Sie dann einen Schlüssel aus:

# optional: ein wiederverwendbares Tier
curl -X POST -H "X-Admin-Token: $TOKEN" -H "content-type: application/json" \
     $BASE/admin/products/acme-app/tiers -d '{"name":"pro","seats":3,"entitlements":{"export":"true"}}'

# eine Lizenz ausstellen ("id" weglassen, um den Schlüssel automatisch zu erzeugen)
curl -X POST -H "X-Admin-Token: $TOKEN" -H "content-type: application/json" \
     $BASE/admin/licenses -d '{"licensee":"Acme Inc.","product":"acme-app","tier":"pro","seats":3,"email":"owner@acme.com"}'
# -> HTTP 201 { "id":"LIC-XXXX...", "product":"acme-app", "tier":"pro", "seats":3, "used":0, ... }

Die id (LIC-…) ist der Schlüssel, den Sie dem Kunden übergeben. seats auf der Lizenz überschreibt den Standardwert des Tiers.

Schritt 6 — Die App des Kunden aktiviert

Der Activate-Aufruf des SDK (oder ein rohes POST $BASE/v1/activate mit dem Body { "key", "machineId", "product" }, ohne Auth) bindet die Maschine, belegt einen Platz und gibt einen signierten Lease zurück, den Ihre App zwischenspeichert und offline erneut prüft:

LicenseInfo info = await License.ActivateAsync(customerKey);   // online: bindet diese Maschine
if (info.IsPaid && License.IsEnabled("export")) { /* freischalten */ }

Das ist der ganze Unterschied zum gehosteten Keyright: Ihr Produktschlüssel und Ihre URL. Die /v1/*-Endpunkte, die Lizenz-/Lease-Formate und jeder SDK-Aufruf sind identisch. Vollständige Rundgänge pro Sprache: .NET, Node.js, Python, Java oder die rohe HTTP-API (die die exakten /v1/*-Request-Bodys dokumentiert).