Skip to content

Commit 9c6c6c5

Browse files
authored
Fix: use jwks_uri from OIDC metadata for JWKS client (#8136)
### What problem does this PR solve? Issue: #8051 The current implementation assumes JWKS endpoints follow the standard `/.well-known/jwks.json` convention. This breaks authentication for OIDC providers that use non-standard JWKS paths, resulting in 404 errors during token validation. Root Cause Analysis - The OpenID Connect specification doesn't mandate a fixed path for JWKS endpoints - Some identity providers (like certain Keycloak configurations) use custom endpoints - Our previous approach constructed JWKS URLs by convention rather than discovery ### Solution Approach Instead of constructing JWKS URLs by appending to the issuer URI, we now: 1. Properly leverage the `jwks_uri` from the OIDC discovery metadata 2. Honor the identity provider's actual configured endpoint ```python # Before (fragile approach) jwks_url = f"{self.issuer}/.well-known/jwks.json" # After (standards-compliant) jwks_cli = jwt.PyJWKClient(self.jwks_uri) # Use discovered endpoint ``` ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)
1 parent baf32ee commit 9c6c6c5

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

api/apps/auth/oidc.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ def parse_id_token(self, id_token):
6868
alg = headers.get("alg", "RS256")
6969

7070
# Use PyJWT's PyJWKClient to fetch JWKS and find signing key
71-
jwks_url = f"{self.issuer}/.well-known/jwks.json"
72-
jwks_cli = jwt.PyJWKClient(jwks_url)
71+
jwks_cli = jwt.PyJWKClient(self.jwks_uri)
7372
signing_key = jwks_cli.get_signing_key_from_jwt(id_token).key
7473

7574
# Decode and verify signature

0 commit comments

Comments
 (0)