Tenant Identity

View as Markdown

Tenant identity (JWT-SVID issuance) and RFC 8693 token delegation.

Tenant Admins use these endpoints to enable JWT-SVID issuance for an org on a specific site, rotate the signing key, configure a token exchange callback, and serve the public JWKS / OIDC discovery documents that verifiers (OpenBao, tenant APIs, etc.) consume.

The six management endpoints (PUT / GET / DELETE on tenant-identity/config and tenant-identity/token-delegation) require an authorization role with TENANT_ADMIN suffix in the URL {org}. The three .well-known/* endpoints are public; external verifiers can fetch public keys without credentials.

PUT is a full-replace upsert: every call must include all required fields, and omitted optional fields are cleared. To pause issuance without destroying signing keys, PUT with enabled: false; to destroy the signing keypair, use DELETE. Signing keys survive enabled: false and survive non-rotation upserts, so JWKS consumers and in-flight JWTs continue to verify across pauses and attribute changes.

JWKS verifiers should treat every key in the returned set as valid and match candidates by kid — during a key-rotation overlap window two keys are present until the previous key expires. The OIDC discovery endpoint’s id_token_signing_alg_values_supported is intentionally empty because NICo issues bearer access JWTs, not OIDC id_tokens. The three public endpoints return 404 Not Found when identity material cannot be served for this org/site (unknown site, org is not a tenant, no tenant allocation on the site, or no identity configuration); the two JWKS routes additionally return 502 Bad Gateway when the Core gRPC API responds with a body that is not a parseable JWK Set.