GeezerVison is showing github.com — fix(coderd): enforce required external auth on workspace create by dylanhuff-at-coder · Pull Request #26314 · coder/coder
Conversation
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.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
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.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
|
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{
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
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 :)
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Reviewers
aslilac
aslilac approved these changes
Uh oh!
There was an error while loading. Please reload this page.
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|