🌐 US-Proxy
class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
Skip to content

fix(coderd): enforce required external auth on workspace create - #26314

Merged
dylanhuff-at-coder merged 1 commit into
mainfrom
dylan/plat-241-api-workspace-creation-bypasses-required-external-auth
Jun 25, 2026
Merged

fix(coderd): enforce required external auth on workspace create#26314
dylanhuff-at-coder merged 1 commit into
mainfrom
dylan/plat-241-api-workspace-creation-bypasses-required-external-auth

Conversation

@dylanhuff-at-coder

@dylanhuff-at-coder dylanhuff-at-coder commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Required external auth (optional = false) was only enforced by client-side preflight checks, so creating a workspace via the REST API succeeded even when the owner had never authenticated, producing a broken workspace.

createWorkspace now validates the workspace owner's external auth server-side and returns 403 before any row is inserted or prebuild is claimed. The owner (not the initiator) is checked because build-time token injection uses their links, so this also covers admin-on-behalf-of creates and prebuild claims. Use optional = true to allow pre-provisioning for unauthenticated users.

Fixes PLAT-241.

This PR was generated by Coder Agents on behalf of @dylanhuff-at-coder.

Required external auth was only enforced by client-side preflight checks
in the CLI and UI, so creating a workspace directly through the REST API
succeeded even when the owner had not authenticated with a required
provider. The build then ran with an empty token and produced a broken
workspace.

Workspace creation now validates the workspace owner's external auth
links against the template version's non-optional providers before any
workspace row is inserted or prebuilt workspace is claimed, returning
403 with one validation entry per missing provider. The owner is the
subject of the check, not the initiator, because build-time token
injection uses the owner's links.
@linear-code

linear-code Bot commented Jun 11, 2026

Copy link
Copy Markdown

PLAT-241

@dylanhuff-at-coder
dylanhuff-at-coder marked this pull request as ready for review June 23, 2026 16:26

@aslilac aslilac left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

very nice fix. thanks!

err := json.Unmarshal(templateVersion.ExternalAuthProviders, &rawProviders)
if err != nil {
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
return nil, httperror.NewResponseError(http.StatusInternalServerError, codersdk.Response{

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this new? I like it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not new — httperror.NewResponseError/WriteResponseError have been around since #18719. I just pulled this out into templateVersionExternalAuthForUser so it returns the error instead of writing inline, which lets requireWorkspaceOwnerExternalAuth reuse it :)

@dylanhuff-at-coder
dylanhuff-at-coder merged commit fde3639 into main Jun 25, 2026
83 of 85 checks passed
@dylanhuff-at-coder
dylanhuff-at-coder deleted the dylan/plat-241-api-workspace-creation-bypasses-required-external-auth branch June 25, 2026 22:47
@github-actions github-actions Bot locked and limited conversation to collaborators Jun 25, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants