fix: accept multiple OIDC audiences for cross-client auth
Build and Push / release (push) Successful in 3s
Build and Push / build (push) Successful in 1m15s

- Changed oidc_audience (string) to oidc_audiences (list)
- Now accepts tokens with audience: core-api, tatlock-ui, tatlock
- Fixes environment endpoint returning "default" user when using
  tatlock-ui token (audience mismatch was causing JWT claims error)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Jeroen Schweitzer
2026-01-07 19:01:39 +01:00
co-authored by Claude Opus 4.5
parent c1f16d44e5
commit 6ce34cc016
7 changed files with 28 additions and 17 deletions
+6 -6
View File
@@ -23,16 +23,16 @@ class OIDCConfig:
# These will be set from environment variables in config.py
self.enabled = False
self.issuer = ""
self.audience = ""
self.audiences: list[str] = []
self.jwks_uri = ""
def configure(self, enabled: bool, issuer: str, audience: str):
def configure(self, enabled: bool, issuer: str, audiences: list[str]):
"""Configure OIDC settings"""
self.enabled = enabled
self.issuer = issuer
self.audience = audience
self.audiences = audiences
self.jwks_uri = f"{issuer.rstrip('/')}/jwks/"
logger.info(f"OIDC configured: enabled={enabled}, issuer={issuer}")
logger.info(f"OIDC configured: enabled={enabled}, issuer={issuer}, audiences={audiences}")
# Global OIDC config instance
@@ -129,12 +129,12 @@ async def get_current_user(
logger.warning(f"No matching key found for kid: {kid}")
raise HTTPException(status_code=401, detail="Invalid token key")
# Verify and decode token
# Verify and decode token (accepts any of the configured audiences)
payload = jwt.decode(
token,
rsa_key,
algorithms=["RS256"],
audience=oidc_config.audience,
audience=oidc_config.audiences,
issuer=oidc_config.issuer,
)