diff --git a/commands/login.go b/commands/login.go index 9822f9f5..7152a01f 100644 --- a/commands/login.go +++ b/commands/login.go @@ -352,6 +352,11 @@ func (l *LoginCmd) determineProvider() (providers.OpenIdProvider, *choosers.WebC return nil, nil, fmt.Errorf("error parsing provider argument: %w", err) } + if l.RemoteRedirectURI != "" { + // Override the remote redirect URI + providerConfig.RemoteRedirectURI = l.RemoteRedirectURI + } + if provider, err = providerConfig.ToProvider(openBrowser); err != nil { return nil, nil, fmt.Errorf("error creating provider from config: %w", err) } else { diff --git a/commands/login_test.go b/commands/login_test.go index b79491a3..fea7699f 100644 --- a/commands/login_test.go +++ b/commands/login_test.go @@ -356,6 +356,15 @@ func TestDetermineProvider(t *testing.T) { wantIssuer: providerIssuer3, wantError: false, }, + { + name: "Good path remoteRedirectURI set (when provider arg specified)", + envVars: map[string]string{"OPKSSH_DEFAULT": providerAlias3, "OPKSSH_PROVIDERS": allProvidersStr}, + providerArg: providerArg2, + providerAlias: "", + remoteRedirectURI: "https://example.com/login_callback", + wantIssuer: providerIssuer2, + wantError: false, + }, } for _, tt := range tests {