swarm: OIDC clients registered wherever authelia runs; nats + matrix secrets from bao
The three client registrations move into glue-{controller,nats,matrix}-oidc-client.nix,
gated only on deploy.authelia.enable and reading their ids from swarm.* options,
so the host running authelia registers every one of them whichever host runs
the service. The matrix callback is a new read-only swarm.matrix.sso.redirectUri,
read by both the homeserver's config and its client entry.
swarm-secret-publish now also publishes the queue's and the homeserver's minted
secrets to swarm/services/<id>/oidc/client. The queue host reads its responder's
secret there with swarm-bao-nats-auth-oidc under the responder's own leaf
(swarm-nats-auth role gains that one read path), and the homeserver's host with
swarm-bao-matrix-oidc under matrix-ctl's leaf (swarm-matrix-ctl role gains its
one read path). The host-file copies are gone: swarm-nats-auth-secrets now
delivers only the callout seeds and the store identity, and
hive-matrix-oidc-secret is removed. A fetch unit whose leaf is unset still
renders and fails naming the option pair.
Closes #4943
This commit is contained in:
parent
72d0d8ccba
commit
962da3b784
20 changed files with 702 additions and 293 deletions
|
|
@ -178,14 +178,34 @@ in
|
|||
type = lib.types.str;
|
||||
default = "tuwunel";
|
||||
description = ''
|
||||
OAuth2 client id this homeserver identifies itself with. Must
|
||||
match the `id` of the corresponding entry in
|
||||
`services.hyperhive.swarm.authelia.oidc.clients`.
|
||||
OAuth2 client id this homeserver identifies itself with. The host
|
||||
running authelia registers it, whichever host runs the homeserver.
|
||||
|
||||
The secret it pairs with is a host path, so it lives at
|
||||
The homeserver's host reads the secret it pairs with out of the
|
||||
swarm secret store, into
|
||||
`services.hyperhive.deploy.matrix.sso.clientSecretFile`.
|
||||
'';
|
||||
};
|
||||
|
||||
redirectUri = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
readOnly = true;
|
||||
default =
|
||||
if cfg.gatewayHost == null then
|
||||
null
|
||||
else
|
||||
"https://${cfg.gatewayHost}/_matrix/client/unstable/login/sso/callback/${cfg.sso.clientId}";
|
||||
defaultText = lib.literalExpression ''"https://''${services.hyperhive.swarm.matrix.gatewayHost}/_matrix/client/unstable/login/sso/callback/''${services.hyperhive.swarm.matrix.sso.clientId}"'';
|
||||
description = ''
|
||||
SSO callback authelia sends the browser back to, and the URI it
|
||||
matches **exactly**. Format-locked by tuwunel: the callback host
|
||||
must point directly at the homeserver, and the path is fixed.
|
||||
|
||||
Read-only: the homeserver's config and its authelia client entry
|
||||
both read it from here. `null` when `gatewayHost` is, because the
|
||||
homeserver then has no name a browser can reach.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue