Skip to content

Conversation

@binaryoverload
Copy link

When using kubelogin (https://github.com/int128/kubelogin), the default authentication experience opens the user’s browser and runs a local HTTP callback listener to complete the OAuth flow.

This PR brings the same experience to the Rancher CLI, enabling easier Microsoft sign-in compared with the device-code flow (which can be more cumbersome).

Changes

  • Add two new flags to the token command:
    • --oauth-flow - select the OAuth flow (device is the default for backwards compatibility; authcode enables the browser-based flow)
    • --oauth-callback-port - local port to use for the redirect/callback listener
  • Implement the authorisation-code flow in token. When --oauth-flow=authcode is selected, the command will:
    • start a local HTTP server on the chosen port (localhost callback)
    • construct the OAuth authorisation URL and open it in the user’s browser
    • receive the auth code from the redirect request and exchange it for a token
    • submit that token to Rancher to obtain the cluster authentication token

AI Disclaimer

The bulk of this PR was drafted with GitHub Copilot (as indicated by the commit author), then manually reviewed and tested by me.

Copilot AI and others added 3 commits January 12, 2026 13:01
Add both OAuth flows: authorization code (default) and device code

- Added --oauth-flow flag to choose between "authcode" (default) and "device"
- Implemented authorization code flow with PKCE using Go native libraries
- Kept device code flow available for backward compatibility
- Added local HTTP server for OAuth callback
- Added browser auto-open functionality
- Added unit tests for PKCE functions and OAuth config

Co-authored-by: binaryoverload <15330699+binaryoverload@users.noreply.github.com>

Fix formatting issues (remove trailing newlines)

Co-authored-by: binaryoverload <15330699+binaryoverload@users.noreply.github.com>

Add configurable callback port for OAuth authcode flow

- Added --oauth-callback-port flag (default: 8888)
- Changed from random port to fixed configurable port
- Required for Azure AD redirect URI pre-configuration
- Updated tests to verify port configuration

Co-authored-by: binaryoverload <15330699+binaryoverload@users.noreply.github.com>

Fix redirectURI parameter usage in exchangeCodeForToken

- Use the passed redirectURI parameter instead of config.RedirectURL
- Ensures consistency between authorization and token exchange

Co-authored-by: binaryoverload <15330699+binaryoverload@users.noreply.github.com>

Add constants for OAuth flow types and timeouts

- Added OAuthFlowDevice and OAuthFlowAuthCode constants
- Added AuthTimeout and ServerShutdownTimeout constants
- Improves code maintainability and prevents typos

Co-authored-by: binaryoverload <15330699+binaryoverload@users.noreply.github.com>

Add validation for OAuth flow parameter

- Validate oauth-flow parameter in runCredential function
- Add explicit switch statement with validation in oauthAuth
- Provide clear error messages for invalid flow types
- Prevents silent fallback to default flow

Co-authored-by: binaryoverload <15330699+binaryoverload@users.noreply.github.com>
@binaryoverload binaryoverload requested a review from a team as a code owner January 12, 2026 13:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant