mirror of
https://github.com/velocitatem/cvfs.git
synced 2026-05-31 08:43:37 +00:00
discover jwks uri from oidc configuration
This commit is contained in:
@@ -55,8 +55,9 @@ class OidcTokenValidator:
|
|||||||
normalized_issuer = _normalize_issuer(issuer)
|
normalized_issuer = _normalize_issuer(issuer)
|
||||||
self.issuer = normalized_issuer
|
self.issuer = normalized_issuer
|
||||||
self.audience = audience
|
self.audience = audience
|
||||||
self.jwks_url = jwks_url or (
|
self.jwks_url = jwks_url
|
||||||
f"{normalized_issuer.rstrip('/')}/.well-known/jwks.json"
|
self.discovery_url = (
|
||||||
|
f"{normalized_issuer.rstrip('/')}/.well-known/openid-configuration"
|
||||||
if normalized_issuer
|
if normalized_issuer
|
||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
@@ -94,7 +95,19 @@ class OidcTokenValidator:
|
|||||||
roles=roles,
|
roles=roles,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def _ensure_jwks_url(self) -> None:
|
||||||
|
if self.jwks_url or not self.discovery_url:
|
||||||
|
return
|
||||||
|
async with httpx.AsyncClient(timeout=10) as client:
|
||||||
|
response = await client.get(self.discovery_url)
|
||||||
|
response.raise_for_status()
|
||||||
|
data = response.json()
|
||||||
|
jwks_uri = data.get("jwks_uri")
|
||||||
|
if isinstance(jwks_uri, str):
|
||||||
|
self.jwks_url = jwks_uri
|
||||||
|
|
||||||
async def _get_key(self, kid: str | None) -> dict[str, Any] | None:
|
async def _get_key(self, kid: str | None) -> dict[str, Any] | None:
|
||||||
|
await self._ensure_jwks_url()
|
||||||
if not self.jwks_url:
|
if not self.jwks_url:
|
||||||
return None
|
return None
|
||||||
if not self._jwks or time.time() > self._jwks_expiry:
|
if not self._jwks or time.time() > self._jwks_expiry:
|
||||||
|
|||||||
Reference in New Issue
Block a user