Skip to content

Require OIDC identity binding before issuing tenant credentials - #61

Merged
sciabarracom merged 1 commit into
apache:0.9.0from
miki3421:security-0.9.0-sso-identity-binding
Oct 20, 2026
Merged

sciabarracom merged 1 commit into
apache:0.9.0from
miki3421:security-0.9.0-sso-identity-binding

Conversation

@miki3421

Copy link
Copy Markdown
Contributor

OIDC namespace mapping currently selects tenant credentials without verifying that the validated external identity owns the selected WhiskUser. Require exact, nonempty iss and sub values to match its SSO annotations before returning credentials.

The same check covers direct-token, password-grant, and device login, including existing resources encountered during auto-provisioning or a create conflict. Recheck the binding before releasing credentials and reject orphan metadata or an existing WhiskUser replaced during login.

Existing namespaces without SSO ownership annotations now return 403 for OIDC login. docs/OIDC.md explains how a cluster administrator can verify the owner and explicitly bind the namespace. Legacy OPS password authentication and the existing metadata credential format are preserved.

Validation:

  • 54 unit tests passed against the current 0.9.0 source, including identity-binding regressions and the existing authentication and builder tests.
  • All openserverless/common/*.py doctests passed; git diff --check passed.
  • The same SSO implementation was tested on a K3s 0.9.0 baseline: 43 post-fix live checks passed, covering real Keycloak direct/password/device flows, auto-provisioning, legacy login, and unchanged Alpha/Beta applications.

Based on apache/openserverless-admin-api:0.9.0 at 2ecb071. This PR contains only the SSO fix, its tests, and related documentation; no workflow or component-version changes.

@sciabarracom
sciabarracom merged commit bab3543 into apache:0.9.0 Oct 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants