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. |
# [1.22.0](v1.21.1...v1.22.0) (2026-04-01) ### Features * add optional SCIM provisioning support for Workbench ([#120](#120)) ([531e45f](531e45f))
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.With this in place, Workbench enables the
https://<workbench-hostname>/scim/v2/Usersendpoint for IDPs to call. I was able to test with direct curl calls to this endpoint, simulating what an IDP would do, creating users, editing their attributes, creating groups, and cleaning it all up.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