@@ -302,9 +302,15 @@ func (n *SamNode) InteractiveLogin(ctx context.Context, authURL, tokenURL, clien
302302 return tokenResp .AccessToken , nil
303303}
304304
305+ // oidcDiscoveryTimeout bounds a single OIDC discovery HTTP call so an
306+ // unresponsive issuer can't hang "join"/"run --join" indefinitely. A var
307+ // (not const) so tests can shrink it instead of waiting out the real value.
308+ var oidcDiscoveryTimeout = 10 * time .Second
309+
305310// DiscoverTokenURL discovers the token URL from the OIDC issuer.
306311func (n * SamNode ) DiscoverTokenURL (ctx context.Context , issuerURL string ) (string , error ) {
307- provider , err := oidc .NewProvider (ctx , issuerURL )
312+ client := & http.Client {Timeout : oidcDiscoveryTimeout }
313+ provider , err := oidc .NewProvider (oidc .ClientContext (ctx , client ), issuerURL )
308314 if err != nil {
309315 return "" , fmt .Errorf ("failed to create OIDC provider: %w" , err )
310316 }
@@ -322,7 +328,8 @@ func (n *SamNode) DiscoverTokenURL(ctx context.Context, issuerURL string) (strin
322328
323329// DiscoverEndpoints discovers both token and authorization endpoints.
324330func (n * SamNode ) DiscoverEndpoints (ctx context.Context , issuerURL string ) (tokenURL , authURL string , err error ) {
325- provider , err := oidc .NewProvider (ctx , issuerURL )
331+ client := & http.Client {Timeout : oidcDiscoveryTimeout }
332+ provider , err := oidc .NewProvider (oidc .ClientContext (ctx , client ), issuerURL )
326333 if err != nil {
327334 return "" , "" , fmt .Errorf ("failed to create OIDC provider: %w" , err )
328335 }
0 commit comments