Tenancymodel — twee ondersteunde vormen
Audact ondersteunt zowel publieke sleutelvrije als organisatiegebonden tenantprovisioning. Kies de vorm die bij uw integratie past.
Audact ondersteunt beide vormen van tenantprovisioning waaruit een integrator mogelijk kiest — dit is een ontwerpbeslissing aan de kant van de aanroeper, geen lacune in de API.
Vorm 1 — Publieke, sleutelvrije aanmaak van tenants
POST /v1/tenants (tenantbeheer, niet-geverifieerd)
- Geen API-sleutel of organisatieaccount vereist om dit eindpunt aan te roepen.
- IP-ratelimiet van 5 aanmaken per IP per uur, omdat het eindpunt anders open staat.
- Tenantlevenscyclus vanaf hier:
GET /v1/tenants/{tenant_id}(viewer+),PUT /v1/tenants/{tenant_id}(eigenaar), API-sleutels viaPOST/GET/DELETE /v1/tenants/{tenant_id}/keys[/{key_id}](eigenaar voor aanmaken/intrekken, developer+ voor weergave).
Vorm 2 — Organisatiegebonden tenants met volledige levenscyclus
POST /v1/org/tenants (organisatiebeheer, vereist een geverifieerde organisatie) —
provisioneert een tenant die eigendom is van de organisatie van de aanroeper, bewust
zonder API-sleutel of standaardconfiguratie; die worden uitgesteld tot een afzonderlijke
initialize-stap zodat het aanmaken en activeren van een tenant twee auditeerbare acties zijn.
Volledige levenscyclus onder het organisatiegebonden model:
| Eindpunt | Effect |
|---|---|
POST /v1/org/tenants | Maakt de tenantrij aan, eigendom van de organisatie. Nog geen sleutel, nog geen configuratie. |
POST /v1/org/tenants/{id}/initialize | Plant de eerste verzegelde standaardconfiguratie van de tenant en onthult zijn eerste eigenaar-API-sleutel (idempotent — geeft 409 already_initialized terug bij een tweede aanroep in plaats van te dupliceren). |
POST /v1/org/tenants/{id}/keys | Maakt een extra eigenaar-API-sleutel aan zonder de configuratie te wijzigen. |
POST /v1/org/tenants/{id}/enable | Stelt status=active in, verwijdert de org:tenant-disabled Redis-markering. |
POST /v1/org/tenants/{id}/disable | Dit is PAUZEREN — zie hieronder. |
DELETE /v1/org/tenants/{id} | Logische verwijdering: stelt deleted_at in, plaatst de org:tenant-disabled-markering. De KMS HMAC-sleutel van de tenant wordt bewaard, nooit gedeprovisioned. |
POST /v1/org/tenants/{id}/restore | Verwijdert deleted_at van een zacht-verwijderde tenant; hergebruikt de oorspronkelijke hmac_key_arn (geen herprovisioning, geen nieuwe configuratie/sleutel). |
POST /v1/org/tenants/{id}/impersonate | Maakt een kortlevend (~20 min) tenant-scoped JWT aan zodat de organisatiebeheerder kan optreden als eigenaar van de tenant tegenover tenant-gerichte diensten; elke aanroep wordt geauditlogd. |
disable is een echte PAUZE
POST /v1/org/tenants/{id}/disable brengt de tenant over naar status=disabled en plaatst
de org:tenant-disabled:{tenant_id} Redis-markering. Vanaf dat moment:
- De API-sleutelauthenticatiemiddleware controleert deze markering op het hot path en weigert elk
verzoek dat is geverifieerd met de API-sleutels van die tenant met
403, foutcodetenant_disabled— inclusief tokens die zijn aangemaakt via impersonatie. - De controle faalt open (staat het verzoek door, logt een waarschuwing) als Redis zelf niet bereikbaar is, zodat een Redis-uitval zelf geen beschikbaarheidsincident kan worden voor tenants die niet zijn uitgeschakeld.
enableverwijdert de markering en hersteltstatus=active; de terugkeer is onmiddellijk.
Dit is het tenant-granulariteitsequivalent van een PAUZE. DID-niveau pauze — een telefoonnummer vasthouden zonder het te routeren — is een afzonderlijk concept.
Per-tenant isolatie in beide vormen
- API-sleutels en het webhook HMAC-ondertekeningsgeheim zijn per tenant, ongeacht welke vorm de tenant heeft aangemaakt — er is geen gedeeld/globaal ondertekeningsgeheim.
- Elke query in tenantbeheer/organisatiebeheer bereikt door middel van
tenant_idvanuit de geverifieerde context, nooit vanuit een veld in de verzoekbody.
Aanbeveling
Één Audact-tenant per integratorzijde-tenant geeft u per-tenant API-sleutel/geheim-isolatie,
de disable → PAUZE-mapping op exact het granulariteitsniveau dat u waarschijnlijk wilt, en de
bestaande cross-tenant-isolatiegrens van Audact — gratis, zonder extra opbouw. De API dwingt
deze mapping niet af, maar het is de eenvoudigste om over te redeneren.
