From 44e84c95bde4c4a2060e15189f3c5b06a8bdde43 Mon Sep 17 00:00:00 2001 From: ishaan-berri <155045088+ishaan-berri@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:15:28 -0700 Subject: [PATCH] Update litellm/proxy/auth/internal_auth_endpoints.py Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- litellm/proxy/auth/internal_auth_endpoints.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/litellm/proxy/auth/internal_auth_endpoints.py b/litellm/proxy/auth/internal_auth_endpoints.py index baad3dffec5..058671df47a 100644 --- a/litellm/proxy/auth/internal_auth_endpoints.py +++ b/litellm/proxy/auth/internal_auth_endpoints.py @@ -133,13 +133,15 @@ async def verify_key(body: VerifyKeyRequest) -> dict[str, Any]: ) synthetic_request = _synthetic_request( route=body.route, api_key=bearer_key, model=body.model - ) - try: - auth = await user_api_key_auth(request=synthetic_request, api_key=bearer_key) - except (ProxyException, HTTPException): + except (ProxyException, HTTPException) as exc: # Expected auth failures (invalid / expired / over-budget / blocked) → 401 # with a minimal body so internals aren't leaked. Unexpected errors (e.g. a - # DB outage) are deliberately NOT caught here: they surface as 500 rather + # DB outage, misconfigured master key) are deliberately NOT caught here: + # they surface as 500 rather than masquerading as "invalid key". The data + # plane still fails closed — it rejects any non-200 from this endpoint. + if isinstance(exc, HTTPException) and exc.status_code >= 500: + raise # let 5xx propagate so operators can see the real error + raise HTTPException(status_code=401, detail="invalid api key") # than masquerading as "invalid key". The data plane still fails closed — # it rejects any non-200 from this endpoint. raise HTTPException(status_code=401, detail="invalid api key")