Commit 8469be9
Enforce OIDC token store lock staleness floor
build() now rejects a FileTokenStore whose lockStaleMillis is below
4x httpTimeoutMillis. The cross-process lock presumes a holder has
crashed once its lock outlives that staleness window and steals it; if
the window is shorter than the worst-case time a live refresh holds the
lock (send + await + parse + body drain, each bounded by
httpTimeoutMillis), a peer can steal a live holder's lock mid-refresh
and reopen the rotating-refresh-token race the lock exists to prevent.
The store cannot see the client's timeout, so build() enforces the
invariant where both values are known. The default store (600s) and any
non-coordinating TokenStore are unaffected.
Also add the two load-path security tests this subsystem lacked:
- a groups-in-token instance rejects a persisted entry whose served id
token carries CR/LF (adopt() must validate the id token, not the
access token, in that mode) and falls back to the device flow;
- a persisted served token carrying a non-ASCII char (> 0x7e), not just
a control char, is rejected on load.
Each new test was confirmed to fail without its fix.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent aba8399 commit 8469be9
3 files changed
Lines changed: 114 additions & 0 deletions
File tree
- core/src
- main/java/io/questdb/client/cutlass/auth
- test/java/io/questdb/client/test/cutlass/auth
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
280 | 280 | | |
281 | 281 | | |
282 | 282 | | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
283 | 289 | | |
284 | 290 | | |
285 | 291 | | |
| |||
Lines changed: 22 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
132 | 132 | | |
133 | 133 | | |
134 | 134 | | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
135 | 140 | | |
136 | 141 | | |
137 | 142 | | |
| |||
1579 | 1584 | | |
1580 | 1585 | | |
1581 | 1586 | | |
| 1587 | + | |
| 1588 | + | |
| 1589 | + | |
| 1590 | + | |
| 1591 | + | |
| 1592 | + | |
| 1593 | + | |
| 1594 | + | |
| 1595 | + | |
| 1596 | + | |
| 1597 | + | |
| 1598 | + | |
| 1599 | + | |
| 1600 | + | |
| 1601 | + | |
| 1602 | + | |
| 1603 | + | |
1582 | 1604 | | |
1583 | 1605 | | |
1584 | 1606 | | |
| |||
Lines changed: 86 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
85 | 85 | | |
86 | 86 | | |
87 | 87 | | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
88 | 116 | | |
89 | 117 | | |
90 | 118 | | |
| |||
557 | 585 | | |
558 | 586 | | |
559 | 587 | | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
560 | 619 | | |
561 | 620 | | |
562 | 621 | | |
| |||
582 | 641 | | |
583 | 642 | | |
584 | 643 | | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
585 | 671 | | |
586 | 672 | | |
587 | 673 | | |
| |||
0 commit comments