Subordinates¶
These database-managed options control the subordinate statements (Entity Statements) that LightHouse issues via its Fetch endpoint. They are split into general settings that apply to all subordinate statements and per-subordinate settings.
Subordinates themselves (entity ID, JWKS, status, etc.) are managed via the Admin API.
General Subordinate Statement Configuration¶
These options apply to every subordinate statement issued by the Fetch endpoint. Per-subordinate overrides (where available) take precedence — see Per-Subordinate Configuration below.
Statement Lifetime (statement_lifetime)¶
duration ~600 000 seconds (≈ 1 week)
The lifetime of Entity Statements (subordinate statements) issued by the Fetch Endpoint. This defines how long a subordinate statement remains valid.
| Tool | Command |
|---|---|
| Admin API | GET/PUT /api/v1/admin/subordinates/lifetime |
| lhsetup | lhsetup --only=statement_lifetime |
| config2db | lhmigrate config2db --only=statement_lifetime |
Constraints (constraints)¶
object / mapping
Constraints object included in subordinate statements, as defined in the OpenID Federation Specification. Managed as a JSON object via the Admin API.
| Tool | Command |
|---|---|
| Admin API | GET/PUT /api/v1/admin/subordinates/constraints |
| lhsetup | lhsetup --only=constraints (via JSON file) |
| config2db | lhmigrate config2db --only=constraints |
Example constraints object
{
"max_path_len": 2,
"naming_constraints": {
"permitted": [".example.com"],
"excluded": ["east.example.com"]
},
"allowed_entity_types": ["openid_provider", "openid_relying_party"]
}
Metadata Policies (metadata_policies)¶
object / mapping
General metadata policies applicable to all subordinates, as defined in the OpenID Federation Specification. Managed as a JSON object via the Admin API.
| Tool | Command |
|---|---|
| Admin API | GET/PUT /api/v1/admin/subordinates/metadata-policies |
| lhsetup | lhsetup --only=metadata_policies (via JSON file) |
| config2db | lhmigrate config2db --only=metadata_policies |
Metadata Policy Crit (metadata_policy_crit)¶
list of strings
Critical metadata policy operators as per the OpenID Federation Specification.
| Tool | Command |
|---|---|
| Admin API | GET/PUT /api/v1/admin/subordinates/metadata-policy-crit |
| lhsetup | lhsetup --only=metadata_policy_crit |
| config2db | lhmigrate config2db --only=metadata_policy_crit |
Additional Claims (additional_claims)¶
list of objects
Additional claims included in every subordinate statement. Each claim can be individually marked as critical.
Each claim object has the following fields:
| Field | Type | Description |
|---|---|---|
id |
integer | Read-only identifier (assigned by the API) |
claim |
string | Claim name |
value |
any | Claim value (any JSON type) |
crit |
boolean | Whether the claim is marked as critical |
| Tool | Command |
|---|---|
| Admin API | GET/PUT/POST /api/v1/admin/subordinates/additional-claims |
| Admin API | GET/PUT/DELETE /api/v1/admin/subordinates/additional-claims/{id} |
| lhsetup | lhsetup --only=subordinate_additional_claims (add/remove) |
Example additional claim
{
"claim": "custom_scope",
"value": "read write",
"crit": false
}
Per-Subordinate Configuration¶
Each subordinate is stored as a record with basic fields, JWKS, JWKS refresh settings, and optional per-subordinate statement overrides. When a statement override is not set, the corresponding general subordinate statement configuration is used as a fallback.
See Subordinate JWKS Refreshing for the full JWKS refresh feature documentation.
Subordinate Record¶
The basic fields on each subordinate, set when creating or updating via the Admin API:
| Field | Type | Description |
|---|---|---|
entity_id |
string | Entity ID of the subordinate |
status |
string | active, blocked, pending, or inactive |
description |
string | Human-readable description |
registered_entity_types |
list | Entity types this subordinate is registered as (e.g. openid_provider) |
enable_jwks_update |
boolean | Enable periodic JWKS polling (see JWKS Refresh) |
jwks_poll_interval |
integer | Poll interval in seconds (see JWKS Refresh) |
| Tool | Command |
|---|---|
| Admin API | GET/POST /api/v1/admin/subordinates |
| Admin API | GET/PUT/PATCH/DELETE /api/v1/admin/subordinates/{subordinateID} |
| Admin API | PUT /api/v1/admin/subordinates/{subordinateID}/status |
| lhsetup | Not applicable (per-subordinate, set via Admin API or enroll endpoint) |
Create a subordinate
curl -X POST -u admin:password \
-H "Content-Type: application/json" \
-d '{
"entity_id": "https://sub.example.com",
"status": "active",
"jwks": {"keys": [...]},
"enable_jwks_update": true,
"jwks_poll_interval": 3600
}' \
https://localhost:8081/api/v1/admin/subordinates
Update a subordinate (PATCH for partial updates)
curl -X PATCH -u admin:password \
-H "Content-Type: application/json" \
-d '{"enable_jwks_update": true, "jwks_poll_interval": 7200}' \
https://localhost:8081/api/v1/admin/subordinates/{subordinateID}
JWKS¶
The subordinate's JWKS, used to verify signatures on its Entity Configuration and signed JWK Sets. Managed via dedicated JWKS endpoints:
| Tool | Command |
|---|---|
| Admin API | GET/PUT/POST /api/v1/admin/subordinates/{subordinateID}/jwks |
| Admin API | DELETE /api/v1/admin/subordinates/{subordinateID}/jwks/{kid} |
JWKS Refresh¶
enable_jwks_update¶
boolean
false
When true, LightHouse periodically polls the subordinate's Entity
Configuration and updates the stored JWKS when keys change. The fetched
Entity Configuration's signature is verified against the currently stored
JWKS; if verification fails, the JWKS is not updated.
jwks_poll_interval¶
integer (seconds)
0 (derive from EC expiration)
Poll interval in seconds. When 0 (the default) or <= 0, LightHouse derives
the interval from the subordinate's Entity Configuration expiration time
(with a small buffer), floored to a minimum of 1 minute.
Statement Overrides¶
The following options override the general subordinate statement configuration for a specific subordinate. When not set, the general value is used as a fallback.
Metadata (metadata)¶
object / mapping
Per-subordinate metadata included in the subordinate statement. When not set, no metadata is included (there is no general subordinate metadata fallback).
| Tool | Command |
|---|---|
| Admin API | GET/PUT /api/v1/admin/subordinates/{subordinateID}/metadata |
| Admin API | GET/PUT/POST/DELETE /api/v1/admin/subordinates/{subordinateID}/metadata/{entityType} |
| Admin API | GET/PUT/DELETE /api/v1/admin/subordinates/{subordinateID}/metadata/{entityType}/{claim} |
Constraints (constraints)¶
object / mapping
Per-subordinate constraints, overriding the general constraints. When not set, the general constraints are used.
| Tool | Command |
|---|---|
| Admin API | GET/PUT/POST/DELETE /api/v1/admin/subordinates/{subordinateID}/constraints |
| Admin API | GET/PUT/DELETE /api/v1/admin/subordinates/{subordinateID}/constraints/max-path-length |
| Admin API | GET/PUT/DELETE /api/v1/admin/subordinates/{subordinateID}/constraints/naming-constraints |
| Admin API | GET/PUT/POST/DELETE /api/v1/admin/subordinates/{subordinateID}/constraints/allowed-entity-types |
Metadata Policies (metadata_policies)¶
object / mapping
Per-subordinate metadata policies, overriding the general metadata policies. When not set, the general metadata policies are used.
| Tool | Command |
|---|---|
| Admin API | GET/PUT/POST/DELETE /api/v1/admin/subordinates/{subordinateID}/metadata-policies |
| Admin API | GET/PUT/POST/DELETE /api/v1/admin/subordinates/{subordinateID}/metadata-policies/{entityType} |
| Admin API | GET/PUT/POST/DELETE /api/v1/admin/subordinates/{subordinateID}/metadata-policies/{entityType}/{claim} |
| Admin API | GET/PUT/DELETE /api/v1/admin/subordinates/{subordinateID}/metadata-policies/{entityType}/{claim}/{operator} |
Additional Claims (additional_claims)¶
list of objects
Per-subordinate additional claims, overriding the general additional claims. When not set, the general additional claims are used.
Each claim object has the following fields:
| Field | Type | Description |
|---|---|---|
id |
integer | Read-only identifier (assigned by the API) |
claim |
string | Claim name |
value |
any | Claim value (any JSON type) |
crit |
boolean | Whether the claim is marked as critical |
| Tool | Command |
|---|---|
| Admin API | GET/PUT/POST /api/v1/admin/subordinates/{subordinateID}/additional-claims |
| Admin API | GET/PUT/DELETE /api/v1/admin/subordinates/{subordinateID}/additional-claims/{id} |
Statement Preview¶
Preview the subordinate statement (Entity Statement payload) that LightHouse would issue for a specific subordinate, including all resolved overrides and fallbacks:
| Tool | Command |
|---|---|
| Admin API | GET /api/v1/admin/subordinates/{subordinateID}/statement |
Event History¶
View the history of changes for a subordinate (status changes, JWKS updates, constraint/policy/claim modifications, etc.):
| Tool | Command |
|---|---|
| Admin API | GET /api/v1/admin/subordinates/{subordinateID}/history |