googleapis / googleapis/google-cloud-python

google-auth: configure_mtls_channel() creates zombie state when dynamically disabled and should fail loudly

Offen
#17,761 0 Kommentare 0 Reaktionen 1 zugewiesene Person Beansprucht von @attharva-24 Auf GitHub ansehen
auth effort: low priority: p2 type: bug
Vorherrschende Sprache
Python
Sterne
5.4k
Forks
1.8k
Ø Merge
3 T. 4 Std.
Gemergte PRs (30 T.)
122

Beschreibung

In `google-auth`, the `configure_mtls_channel()` method in transport adapters (`requests`, `urllib3`, and `aiohttp`) exits early when it detects that mTLS should not be used (i.e. `check_use_client_cert()` evaluates to `False`).

However, if mTLS was previously enabled on the session, exiting early sets `self._is_mtls = False` but leaves the existing mTLS adapters attached to the transport layer. This creates a "zombie state" mismatch: the SDK bypasses future mTLS rotation logic because it believes mTLS is disabled, but the active network session continues to use the old, invalid client certificates indefinitely, resulting in a perpetual loop of `401 Unauthorized` responses.

**Expected behavior:**
While it might seem intuitive to gracefully tear down the old mTLS adapters and fall back to standard TLS, dynamically unmounting adapters or replacing connection pools mid-lifecycle is **unsafe** in concurrent environments. It violates the thread-safety design of the underlying HTTP libraries (`requests`, `urllib3`, `aiohttp`) and causes unpredictable crashes (e.g., `RuntimeError: dictionary changed size during iteration`) and connection drops.

Therefore, when transitioning from an mTLS-enabled state to an mTLS-disabled state mid-lifecycle, `configure_mtls_channel()` should **fail loudly** by raising a `MutualTLSChannelError`. This halts the infinite 401 retry loop, guarantees thread-safety for other active requests, and explicitly signals to the developer that the environment has shifted and a new `AuthorizedSession` must be instantiated.

**Affected paths:**
- `google/auth/transport/requests.py`
- `google/auth/transport/urllib3.py`
- `google/auth/aio/transport/sessions.py`

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.