Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

fix(auth): SubjectTokenProviderError drops response and duplicates error message in workload identity providers

Ouverte Adaptée aux débutants
#4,017 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@mohmedmm y travaille déjà.

Depuis le 2/10/2026.

  • #1 par @mohmedmm — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
86/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
authentication

Piste de recherche

Commencez dans src/openai/auth/_workload.py et examinez la gestion des exceptions dans k8s_service_account_token_provider, azure_managed_identity_token_provider et gcp_id_token_provider. Reproduisez le problème avec la réponse HTTP 500 simulée décrite ci-dessus, puis vérifiez que SubjectTokenProviderError conserve la réponse et évite les messages dupliqués ainsi que le chaînage d’exceptions redondant.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Confirm this is an issue with the Python library and not an underlying OpenAI API
  • This is an issue with the Python library
Describe the bug

In src/openai/auth/_workload.py, the built-in workload identity subject token providers (azure_managed_identity_token_provider(), gcp_id_token_provider(), and k8s_service_account_token_provider()) catch their own intentionally raised SubjectTokenProviderError exceptions inside generic except Exception as e: blocks.

This leads to two issues:

  1. Lost response property: SubjectTokenProviderError defines a response: httpx2.Response | None attribute. The provider functions explicitly pass response=response when the metadata server returns an error status (response.is_error) or an empty body. However, the outer except Exception as e: intercepts this error (as SubjectTokenProviderError inherits from OpenAIError -> Exception) and instantiates a brand new SubjectTokenProviderError(...) without passing response, setting err.response to None. Callers attempting to inspect err.response for headers, status codes, or error details receive None.
  2. Duplicated error message prefixes: The re-wrapped exception message duplicates the prefix (e.g. "Failed to fetch Azure subject token from IMDS: Failed to fetch Azure subject token from IMDS: HTTP 500").
  3. Redundant exception nesting: A SubjectTokenProviderError is chained as the __cause__ of an identical SubjectTokenProviderError.
To Reproduce

Steps:

  1. Initialize azure_managed_identity_token_provider() or gcp_id_token_provider() with an http_client mock returning an HTTP 500 (or non-200) error.
  2. Call provider["get_token"]().
  3. Catch SubjectTokenProviderError and inspect err.response and str(err).
Code snippets
import httpx2
from openai.auth._workload import azure_managed_identity_token_provider
from openai._exceptions import SubjectTokenProviderError

mock_client = httpx2.Client(
    transport=httpx2.MockTransport(lambda req: httpx2.Response(500, text="Internal Server Error"))
)
provider = azure_managed_identity_token_provider(http_client=mock_client)

try:
    provider["get_token"]()
except SubjectTokenProviderError as err:
    print(f"err.response is: {err.response}")  # Actual: None | Expected: <Response [500]>
    print(f"Error message: {err}")
    print(f"err.__cause__: {repr(err.__cause__)}")

Actual Output:

err.response is: None
Error message: Failed to fetch Azure subject token from IMDS: Failed to fetch Azure subject token from IMDS: HTTP 500
err.__cause__: SubjectTokenProviderError('Failed to fetch Azure subject token from IMDS: HTTP 500')

Expected Output:
err.response should retain the <Response [500 Internal Server Error]> object attached when the initial SubjectTokenProviderError was raised, and the error message should not contain duplicated prefixes.

Proposed fix

In src/openai/auth/_workload.py:
In k8s_service_account_token_provider, azure_managed_identity_token_provider, and gcp_id_token_provider, re-raise SubjectTokenProviderError before the generic except Exception block:

        except SubjectTokenProviderError:
            raise
        except Exception as e:
            raise SubjectTokenProviderError(f"...: {e}") from e
OS

All platforms (cross-platform library error handling)

Python version

Python 3.10+

Library version

openai v1.x / latest main

Langage dominant
Python
Étoiles
31.8k
Forks
7.3k
Merge moyen
1 j 3 h
PR mergées (30 j)
131

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de openai/openai-python

Toutes les issues de openai/openai-python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.