Add unmanaged mode for oauth flow#830
Merged
dgageot merged 1 commit intodocker:mainfrom Nov 17, 2025
Merged
Conversation
There are now two modes in the oauth flow - Managed mode In this mode, cagent handles, in process, everything oauth related: asking for user consent, starting the oauth callback server, resuming once the flow is done - Unmanged mode This mode is more for the remote case in cagent, in this mode the remote cagent will _only_ ask for user consent via an elicitation, up to the client to do the oauth flow and send the token back in the elicitation response. Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>
dgageot
approved these changes
Nov 17, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
There are now two modes in the oauth flow
In this mode, cagent handles, in process, everything oauth related: asking for user consent, starting the oauth callback server, resuming once the flow is done
This mode is more for the remote case in cagent, in this mode the remote cagent will only ask for user consent via an elicitation, up to the client to do the oauth flow and send the token back in the elicitation response.
Here is what
cagenthas to say about the difference in the two modes:Now I can explain the key differences between
handleUnmanagedOAuthFlowandhandleManagedOAuthFlow:Key Differences Between the Two OAuth Flow Functions
handleManagedOAuthFlow (lines 184-285)
This function performs the complete OAuth flow within cagent itself:
t.client.requestUserConsent()to get approval from the userRequestAuthorizationCode()which typically opens the auth URL in a browserExchangeCodeForToken()to get the access tokenUse case: When cagent is running locally and can open a browser, start HTTP servers, and handle the full OAuth dance.
handleUnmanagedOAuthFlow (lines 288-363)
This function delegates the OAuth flow to the client (typically an MCP client like Claude Desktop):
t.client.requestElicitation()with OAuth metadataaccess_tokenand other fields from the elicitation responseUse case: When cagent is running as an MCP server where it cannot open browsers or run callback servers. The client application handles the OAuth UI and returns the completed token.
Summary Table
The managed flow is more complex but gives full control, while the unmanaged flow is simpler and delegates responsibility to a more capable client that has better UI capabilities for handling OAuth.