• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive / 42793114256
73%

Build:
DEFAULT BRANCH: main
Ran 10 Nov 2026 09:52AM UTC
Jobs 1
Files 1005
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

10 Nov 2026 09:43AM UTC coverage: 72.791% (-0.03%) from 72.818%
42793114256

push

github

web-flow
Prevent ID-JAGs from being used as access tokens (#7089)

* Separate grant validity from derivation eligibility

A live exchange grant is not necessarily eligible to create a child.
For example, an ID-JAG-only grant can be valid but must not derive
another refresh-token grant.

Move the top-level and refresh-token issuability checks into
decideChild, leaving presentedGrant to validate the grant itself.
This prepares validation for ID-JAG issuance without adding that path
or changing the derivation refusal order.

Refs: #6898
Co-authored-by: Mecatl <noreply@mecatl.dev>

* Refuse ID-JAGs where access tokens are expected

An ID-JAG is an assertion for an authorization server, not an access
token. When an issuer signs both with the same key, an ID-JAG could
otherwise pass access-token validation if its claims also satisfy the
checks. Refuse its JOSE type in resource-server and token-exchange
access-token validators while keeping ID-JAG redemption separate.

The check covers subject and actor tokens and login tokens used to
create exchange grants. It matches the type case-insensitively and
with an optional application/ prefix; missing or non-string types are
not rejected by this check. vMCP uses the same matcher for its ID-JAG
diagnostic.

JWT-bearer redemption retains its exact type match for routing. Type
variants therefore fail closed rather than reaching the ID-JAG handler;
normalizing redemption routing is a follow-up.

Refs: #6898
Co-authored-by: Mecatl <noreply@mecatl.dev>

* Keep ID-JAG redemption typ matching exact

Redemption routing compares the ID-JAG typ exactly, as the ID-JAG
draft requires of an issuer, while the access-token checks normalize
it per RFC 7515 Section 4.1.9. Document that as intended and fail
closed, not as a known gap.

Remove the ID-JAG case from the plain JWT-bearer typ allowlist. It
was unreachable: IDJAGHandler claims the exact type first. Keeping it
would let a mis-routed ID-JAG skip client authentication. Pin the
refusa... (continued)

35 of 38 new or added lines in 7 files covered. (92.11%)

48 existing lines in 2 files now uncovered.

93964 of 129088 relevant lines covered (72.79%)

849.9 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
97.3
-0.98% pkg/authserver/server/tokenexchange/validator.go
1
87.56
0.06% pkg/authserver/server/tokenexchange/multi_issuer_validator.go

Coverage Regressions

Lines Coverage ∆ File
45
59.63
-4.68% pkg/workloads/manager.go
3
0.0
-100.0% pkg/workloads/sysproc_unix.go
Jobs
ID Job ID Ran Files Coverage
1 42793114256.1 10 Nov 2026 09:52AM UTC 1005
72.79
GitHub Action Run
Source Files on build 42793114256
  • Tree
  • List 1005
  • Changed 11
  • Source Changed 6
  • Coverage Changed 10
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #42793114256
  • 965db4d4 on github
  • Prev Build on main (#42646661924)
  • Next Build on main (#42794424099)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc