feat(oidc): cache OIDC provider instances to prevent redundant calls #2308
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
I noticed we were making redundant HTTP calls to OIDC discovery endpoints (
.well-known/openid-configuration) on every single OAuth/OIDC request:/authorizerequest -> HTTP call to provider's discovery endpoint/callbackrequest -> Another HTTP call to the same endpoint/token?grant_type=idtoken-> Yet another HTTP callImpact: 10-500ms added latency per OAuth flow, 2+ unnecessary external HTTP requests per login. At scale this is huge amount of unnecessary traffic.
Solution
Implemented thread-safe caching of
oidc.Providerinstances with smart defaults:Also added a new optional environment variable:
Default: 1 hour (reasonable since OIDC discovery configs rarely change)
Notes
Safe for Cross-Account Use
IMPORTANT: The cache stores ONLY discovery metadata (endpoints, supported algorithms, etc), NOT user tokens or session data.
JWKS Key Rotation Still Works
go-oidclibrary internally handles JWKS key fetching and rotationAzure Multi-Tenant Support