vergabe-teilnahme/docs/netkingdom-sign-in.md
tegwick 8be281025b
Some checks failed
CI Smoke / host-smoke (push) Waiting to run
CI Smoke / container-smoke (push) Waiting to run
Application acceptance / application-tests (push) Has been cancelled
Build and Publish Container Image / build-and-push (push) Successful in 40s
Add company welcome and verified NetKingdom sign-in
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a092fe-13b1-7f12-ac74-7d258af4d79c
2026-09-12 02:43:31 +02:00

4.1 KiB

Company welcome and NetKingdom sign-in

VERGABE-WP-0019-T06. The isolated company instance consumes Authorization Code with S256 PKCE and a browser-bound state and nonce. It discovers endpoints from the configured HTTPS issuer, pins RS256, verifies signature/issuer/audience, time and nonce, and uses a unique (issuer, subject) record for the local user. It never merges accounts by email or directory display name.

Admission requires the exact configured tenant, tenant_source: directory, a human principal and the signed <tenant>:users membership group. Suspended, platform and emergency identities fail. This is the existing invited-company pilot rule: admitted members collaborate on all company tenders. Tenant-admin claims do not grant Django staff or superuser rights. New local users have no usable local password. Local deactivation immediately blocks existing sessions; provider-side revocation is bounded by the product's absolute five-minute session maximum (or the token expiry, whichever comes first).

The welcome page never consumes password-setup tokens. A CSRF-protected sign-in action clears the current product session and requests prompt=login. A valid callback displays the verified account and requires another CSRF-protected confirmation before creating a product session. External next and return_to parameters are not used. The callback redirects to a clean URL before displaying identity. Gunicorn access logging records the URL path without query strings. Passwords and bearer tokens are not persisted in the product.

Exact demo binding

Enable only with the registered client and the verified KeyCape fresh-login release. The currently deployed dcebd46 issuer lacks tenant_source and does not propagate fresh-login requests to Authelia; this product fails closed on it.

NETKINGDOM_ENABLED=true
NETKINGDOM_ISSUER=https://kc.coulomb.social
NETKINGDOM_CLIENT_ID=vergabe-demo-company
NETKINGDOM_CALLBACK=https://vergabe-teilnahme.coulomb.social/demo-company/accounts/oidc/callback/
NETKINGDOM_TENANT=tenant:trial:demo-company
COMPANY_DISPLAY_NAME=Demo Company

Use a public client with only openid profile groups, authorization_code, and the exact callback above. Do not add a client-declared tenant or a weaker MFA override. Keep the existing provider MFA policy. The application namespace requires narrowly scoped HTTPS egress to the issuer; its existing policy only allows database traffic and DNS.

NetKingdom's password setup maps tenant:trial:demo-company to the fixed HTTPS company entry in PASSWORD_SETUP_TENANT_RETURNS. That return is stored inside the setup grant at issuance and released only after successful consumption. There is no browser-supplied return address, recipient credential transfer, automatic product login or modification to the operator's portal session. Existing setup grants have no new destination; issue a fresh link if needed.

Release and acceptance

Run application tests, assets build and migration drift checks, publish the exact source, and pin its digest in the existing Railiance pilot values. Migration 0003 adds only the unique identity mapping table. Keep the accepted 60m CPU / 256Mi memory request and both data claims. Disabling NETKINGDOM_ENABLED restores the interim local login; OIDC-created users still have unusable local passwords, so rollback does not manufacture credentials. Keep the added table when reverting an application image.

KeyCape's current main also contains previously accepted startup and token issuance changes after deployed source dcebd46; validate the live registration configuration before upgrading (key-cape/docs/operations.md). Existing login attempts are process-local and are lost on its single-replica Recreate rollout. Password-setup links are likewise process-local and expire on provisioner restart.

Native acceptance still requires the actual invited user to complete setup, fresh sign-in and any provider-required MFA, confirm their account, and enter the company workflow. Do not substitute an operator session. Recovery and two-user workflow acceptance remain the existing RAPPS-WP-0014-T03 and VERGABE-WP-0019-T04 tasks.