Commit be84cf9
Address round-2 PR review: rotation 401 blocker + cleanups
Blocker: the unknown-kid cooldown gate 401'd legitimate tokens during a
real Keycloak key rotation. The SPA fires /api/me, /api/models and
/api/keys concurrently on page load, so on the first load after a
rotation one request won the CAS and fetched while the others got
errKIDRefreshCooldown and were rejected. Move the cooldown check inside
the singleflight callback so concurrent callers block on the one
in-flight fetch and share its result, and re-check the cache in keyFunc
regardless of the refresh outcome. The DoS bound (one outbound fetch per
30s window) is preserved. Add TestRotatedKIDResolvesForConcurrentBurst.
Take the steady-state JWKS refresh off the request path: a synchronous
hourly refresh stalled every concurrent request for up to the fetch
timeout when Keycloak was unreachable as the cache went stale. Move it
to a background ticker (refreshLoop) and drop the now-dead lastFetch.
Other review items:
- Cap the JWKS response body at 1 MiB (io.LimitReader).
- Call validator.Stop() on shutdown.
- Add security headers (X-Frame-Options, CSP frame-ancestors,
X-Content-Type-Options) and a no-store /config.json block to both
nginx configs; the UI exposes one-click revoke.
- Template the NebariApp groups mapper claim.name from
auth.oidc.groupsClaim so it can't drift from what the key-manager reads.
- Comment provider: keycloak pointing at #61.
- Note pinClientAudience is only meaningful with frontend.enabled=true.
- Fix the stale ui-development.md shipping instructions.
- Delete the stale frontend-rewrite-plan.md.
- Drop an em dash in test-auth.sh.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 23d541b commit be84cf9
11 files changed
Lines changed: 204 additions & 290 deletions
File tree
- charts/nebari-llm-serving
- templates
- dev
- docs/src/content/docs
- frontend
- key-manager
- cmd
- internal/api
Lines changed: 17 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
65 | 74 | | |
66 | 75 | | |
67 | 76 | | |
| |||
91 | 100 | | |
92 | 101 | | |
93 | 102 | | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
94 | 111 | | |
95 | 112 | | |
96 | 113 | | |
| |||
Lines changed: 7 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
| 37 | + | |
36 | 38 | | |
37 | 39 | | |
38 | 40 | | |
39 | 41 | | |
40 | 42 | | |
41 | | - | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
42 | 47 | | |
43 | 48 | | |
44 | 49 | | |
45 | 50 | | |
46 | 51 | | |
47 | | - | |
| 52 | + | |
48 | 53 | | |
49 | 54 | | |
50 | 55 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
103 | 108 | | |
104 | 109 | | |
105 | 110 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
| 115 | + | |
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| |||
This file was deleted.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
39 | 48 | | |
40 | 49 | | |
41 | 50 | | |
| |||
55 | 64 | | |
56 | 65 | | |
57 | 66 | | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
58 | 75 | | |
59 | 76 | | |
60 | 77 | | |
| |||
0 commit comments