litellm/tests/test_litellm/proxy/auth
Ishaan Jaff ee703cea99
fix(jwt): OIDC discovery URLs, roles array handling, dot-notation error hints (#22336)
* fix(jwt): support OIDC discovery URLs, handle roles array, improve error hints

Three fixes for Azure AD JWT auth:

1. OIDC discovery URL support - JWT_PUBLIC_KEY_URL can now be set to
   .well-known/openid-configuration endpoints. The proxy fetches the
   discovery doc, extracts jwks_uri, and caches it.

2. Handle roles claim as array - when team_id_jwt_field points to a list
   (e.g. AAD's "roles": ["team1"]), auto-unwrap the first element instead
   of crashing with 'unhashable type: list'.

3. Better error hint for dot-notation indexing - when team_id_jwt_field is
   set to "roles.0" or "roles[0]", the 401 error now explains to use
   "roles" instead and that LiteLLM auto-unwraps lists.

* Add integration demo script for JWT auth fixes (OIDC discovery, array roles, dot-notation hints)

Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>

* Add demo_servers.py for manual JWT auth testing with mock JWKS/OIDC endpoints

Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>

* Add demo screenshots for PR comment

Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>

* Add integration test results with screenshots for PR review

Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>

* address greptile review feedback (greploop iteration 1)

- fix: add HTTP status code check in _resolve_jwks_url before parsing JSON
- fix: remove misleading bracket-notation hint from debug log (get_nested_value does not support it)

* Update tests/test_litellm/proxy/auth/test_handle_jwt.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* remove demo scripts and assets

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-02-27 20:30:47 -08:00
..
test_auth_checks.py fix(proxy): self-heal Prisma connection for auth and runtime (#21706) 2026-02-20 18:11:36 -08:00
test_auth_exception_handler.py
test_auth_hot_path_network_requests.py fix: update docker test file to right path 2026-02-19 18:44:28 +05:30
test_auth_utils.py fix(proxy): support slashes in google generateContent model names (#19737) 2026-01-25 22:59:50 -08:00
test_cli_auth.py Fix team cli auth flow (#19666) 2026-01-28 08:52:52 -08:00
test_custom_auth_end_user_budget.py fix: req changes 2026-02-26 15:19:32 +05:30
test_handle_jwt.py fix(jwt): OIDC discovery URLs, roles array handling, dot-notation error hints (#22336) 2026-02-27 20:30:47 -08:00
test_litellm_license.py Show remaining users on UI (#11568) 2025-06-09 22:04:45 -07:00
test_login_utils.py remove key blocking 2026-01-31 16:46:17 -08:00
test_mcp_ip_filtering.py Return Clear error message why no tools are available / IP Filtering occured 2026-02-26 09:56:44 +05:30
test_model_checks_fallbacks.py feat: extended /v1/models endpoint, now it returns with fallbacks on demand (#12811) 2025-07-22 23:16:46 -07:00
test_model_checks.py fixed byok models for teams issue (#21408) 2026-02-17 15:26:03 -08:00
test_object_permission_loading.py Fix:test_get_key_object_loads_object_permission 2026-02-18 19:18:15 +05:30
test_organization_budget_enforcement.py Fix/organization max budget not enforced (#17334) 2025-12-02 22:46:03 -08:00
test_route_checks.py tests and route permissions (#21508) 2026-02-18 16:58:38 -08:00
test_team_member_budget.py 3[Fix] CI/CD - logging_testing (#18204) 2025-12-18 10:52:24 -08:00
test_user_api_key_auth.py Revert "Merge pull request #21140 from BerriAI/litellm_perf_user_api_key_auth" 2026-02-21 16:57:42 -08:00