feat: add optional SCIM provisioning support for Workbench#120
feat: add optional SCIM provisioning support for Workbench#120
Conversation
|
Claude finished @timtalbot's task —— View job Review: SCIM Provisioning for Workbench
Well-structured feature with clear separation between managed and BYO modes. The reconciler logic is idempotent and the test coverage is solid. A few items to consider: Security — BYO secret key validation (
|
|
@claude re-review |
|
Claude finished @timtalbot's task —— View job Re-review: SCIM Provisioning for Workbench
All five actionable items from the first review have been addressed:
Test coverage has also been expanded (6 tests, up from 4):
One remaining observation (non-blocking): Managed secret cleanup on disable ( Otherwise, this looks good to merge. |
Description
Adds opt-in SCIM user provisioning for Workbench, allowing an external IdP (e.g. Okta, Entra ID) to manage users and groups via the Workbench SCIM v2 API without requiring first-login.
API — new
scimblock onSite.spec.workbench:Operator behaviour when
scim.enabled: true:<site-name>-workbench-scim-tokeninposit-team. The token is never rotated automatically; deleting the Secret triggers regeneration on the next reconcile.tokenSecretNameat a pre-existing Secret with atokenkey (BYO mode). The operator uses it as-is and does not manage its lifecycle./etc/rstudio/scim-tokenvia a Secret volume.WORKBENCH_USER_SERVICE_AUTH_TOKEN_PATH=/etc/rstudio/scim-tokenon the Workbench container so Workbench can locate the token at startup.Retrieve the token to configure your IdP:
Configure your IdP SCIM endpoint as
https://<workbench-hostname>/scim/v2with Bearer token auth.Code Flow
api/core/v1beta1/site_types.goWorkbenchSCIMConfigstruct;SCIMfield onInternalWorkbenchSpecapi/core/v1beta1/workbench_types.goSCIMfield onWorkbenchSpecinternal/controller/core/site_controller_workbench.gosite.Spec.Workbench.SCIM→targetWorkbench.Spec.SCIMinternal/controller/core/workbench.goreconcileSCIMToken,buildSCIMTokenEnvVars,buildSCIMTokenVolumeMounts,buildSCIMTokenVolumesinternal/controller/core/workbench_test.goconfig/crd/bases/,client-go/,zz_generated.deepcopy.goCategory of change
Checklist
just testand all tests pass