Lizenzen, App-IDs & Mandanten

Ein UESPA-LicenseCert bindet deine App an ihren Namespace im Mesh. Es wird vom Developer-Portal signiert und auf dem Gerät offline geprüft.

App-ID

Die App-ID ist der Grund-Namespace deiner App und weltweit eindeutig. Erlaubt sind Android-PackageName bzw. iOS-Bundle-ID (com.example.chat), Hostnamen für Web (example.com, *.example.com) und Firmware-IDs (esp32-door-v2), jeweils bis 64 Zeichen. Das SDK vergleicht sie beim Start mit der ID des Host-Systems.

LicenseCert

FeldInhalt
dev_id8 Byte, deine Entwickler-ID aus dem Portal
app_iddie registrierte App-ID
tenant_ids0–8 Mandanten (UUID), ab Pro
max_devicesObergrenze für Quota-Macaroons pro Lizenz
issued_at, expiryLaufzeit (Free 90, Pro/Enterprise 365 Tage)
signatureEd25519-Signatur des Ops-Keys der Authority

Das Zertifikat hat eine feste Größe von 294 Byte und kann direkt in Firmware oder App-Ressourcen eingebettet werden.

Rotation und Sperre

Pro App können mehrere Zertifikate gleichzeitig gültig sein (Free 2, Pro 3, Enterprise 5), damit du ohne Ausfall rotieren kannst. Eine Sperre wirkt sofort an der Authority: gesperrte Zertifikate bekommen kein neues Quota-Macaroon für uespa.net. Weil die Prüfung auf dem Gerät offline passiert, bleibt das Mesh selbst bis zum Ablauf nutzbar – deshalb sind die Laufzeiten begrenzt, und eine App-ID lässt sich erst nach Ablauf aller Zertifikate freigeben.

Mandanten (Pro)

Mit Mandanten trennst du z. B. einzelne Kunden innerhalb einer App. Jede Tenant-ID bekommt einen eigenen Namespace (namespace(app_id, tenant)). Die Trennung betrifft nur die Zustellung: als Hop leitet jedes Gerät weiterhin Pakete aller Apps und Mandanten verschlüsselt weiter.

rust
let mut cfg = UespaConfig::new(LicenseInput::Cert(cert), device_seed);
// Tenant-ID aus dem Portal (UUID = 16 Byte); muss im Zertifikat stehen
cfg.tenants = vec![uuid::Uuid::parse_str("3f2c5b1e-8a4d-4c1b-9e2f-6a7b8c9d0e1f")?.into_bytes()];

Neue Mandanten fließen in das nächste ausgestellte Zertifikat ein. Ein Mandant, der in einem noch gültigen Zertifikat steht, lässt sich erst nach dessen Ablauf entfernen.