[Design Discussion] Centralized Authentication with Distributed Enforcement #2258
Replies: 3 comments 2 replies
-
|
Do we need to have the client_id enforcement? My idea is we don't need it. Because we will have cased where the different clients are allowed to access the Thunder. So having only the Issuer + JWKS signature + audience verification should be enough. Regarding your questions
|
Beta Was this translation helpful? Give feedback.
-
|
Agree. Updated and removed client ID. Additionally if there is a use case to validate client Id this can be done via the custom claim validation as well. |
Beta Was this translation helpful? Give feedback.
-
|
If we are going to bring the external issuer support for management APIs with this effort, I believe that we can also align this to fully support this for OAuth token exchange as well, which is also one of our pending requirements for agent ID use cases. From the OAuth token exchange perspective:
Also note that the resource parameter support is not implemented yet end to end in Thunder and we do not have restrictions/ceiling on what permissions an app is allowed in a resource server, which may be need for scope downscoping, audience restriction etc. while issuing tokens via token exchange(#2198) |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Related Feature Issue
#2257
Problem Summary
Thunder is self-contained — the same instance authenticates users and serves APIs. This prevents centralized identity across multiple instances (multi-tenant SaaS, CP/DP architectures). Resource servers also need to restrict access based on token claims (e.g., ouId).
High-Level Approach
Resource server validates JWTs from an external auth server via its JWKS endpoint. No shared secrets or databases.
Frontend separates auth server config from resource server config. SDK authenticates against auth server, API calls go to resource server.
Architecture Overview
Console → Auth Server: OAuth authorize (resource=RS)
Console ← Auth Server: JWT (iss=AS, aud=RS)
Console → Resource Server: API + Bearer token
Resource Server → Auth Server: JWKS fetch (cached 5min)
Resource Server: verify signature + claims + required_claims
Two backend validation entry points:
Both fall back to JWKS verification when local key verification fails, then enforce required claims.
Security Considerations
Impacted Areas
No existing APIs or schemas modified. Additive and config-gated.
Alternatives Considered
Federated login via resource server — user authenticates at the resource server, which federates to the auth server and exchanges the token locally. Rejected because the goal is to directly trust auth server tokens on the resource server, not to exchange them for locally-issued tokens. JWKS validation is simpler and avoids the token exchange overhead.
Questions for Community Input
Beta Was this translation helpful? Give feedback.
All reactions