[ISS-9] getAuth en getTokenScopedProducts controleren expires_at niet: verlopen API-token blijft werken #164
Labels
No labels
severity/s2
severity/s3
severity/s4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
janpeter/scrum4me-mcp#164
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Status: closed (fixed) · Severity: s3_major · Gemeld door: mac:claude · Occurrences: 1 (laatst: 2026-09-27T16:30:45.009Z) · Aangemaakt: 2026-09-27T16:30:45.009Z
Registratie
Probleem
ApiToken.expires_atwordt insrc/auth.tsniet gecontroleerd.getAuth()(regel 29-36) engetTokenScopedProducts()(regel 75-85) weigeren alleen bijrevoked_at. Een token met een vervaldatum in het verleden blijft daardoor geldig op alle MCP-tools, terwijl de workers-UI het als "Verlopen" toont.Het dispatchpad doet het wel goed:
src/dispatch/auth.ts:14-15filtert oprevoked_at IS NULL AND (expires_at IS NULL OR expires_at > now()).Geverifieerd
origin/main
c20688e(2026-09-27):grep -c expires_at src/auth.tsgeeft 0.Afgesproken oplossing (akkoord JP 2026-09-27)
expires_at <= nowbehandelen als ongeldig, met dezelfde foutmelding als een ingetrokken token.getTokenScopedProducts()geeft voor zo'n token[].Buiten deze fix
src/presence/heartbeat.ts:21-25controleert ook alleenrevoked_at; beslissing van JP staat nog open.Gevolg bij uitrol
Niet-ingetrokken tokens die al verlopen zijn, worden na de fix geweigerd. JP controleert dat zelf voor de merge.
Zelfde omissie in Scrum4Me
lib/api-auth.ts; daarvoor is een eigen issue op dat product aangemaakt. Gevonden tijdens de read-only review van IDEA-227, maar valt daarbuiten.Onderzoek
2026-09-27T16:38:11.578Z — mac:claude
Fix staat klaar in PR #163 (branch
fix/api-token-expiry, commitec10777). Nog niet gemerged; merge en uitrol wachten op opdracht van JP.src/auth.ts:getAuth()engetTokenScopedProducts()weigeren een token metexpires_at <= now.__tests__/auth-scoped.test.ts; drie faalden voor de fix.npm run typecheckschoon,npm test1814 geslaagd / 51 overgeslagen.Open: controle door JP op al verlopen, niet-ingetrokken tokens voor de merge. Heartbeat (
src/presence/heartbeat.ts) zit niet in deze PR.2026-09-27T18:18:39.561Z — mac:claude
Heartbeat op opdracht van JP meegenomen in dezelfde PR (#163), als tweede commit.
src/presence/heartbeat.ts: tick wordt overgeslagen bij een verlopen token; geenlast_seen_at-verversing en geen herregistratie van een verdwenen worker-rij.isTokenExpiredgeexporteerd uitsrc/auth.ts, gedeeld door beide paden.__tests__/heartbeat-user-id-refresh.test.ts.npm run typecheckschoon,npm test1816 geslaagd / 51 overgeslagen.Nog open: tokencheck door JP voor de merge.
2026-09-27T18:19:55.724Z — mac:claude
Correctie op de vorige notitie: de heartbeat-fix zit niet in PR #163. Die PR was door JP al gemerged (2026-09-27 19:26, merge-commit
4c9489f) voordat de heartbeat-commit3e94daawerd gepusht.Stand:
getAuth()engetTokenScopedProducts()(commitec10777, via #163).Oplossing
2026-09-27T18:33:01.500Z — mac:claude
Opgelost in main via twee PR's, beide gemerged door JP op 2026-09-27:
4c9489f):getAuth()engetTokenScopedProducts()weigeren een token metexpires_at <= now, met dezelfde foutmelding als een ingetrokken token.d9e825f): de heartbeat slaat de tick over bij een verlopen token;isTokenExpiredis gedeeld vanuitsrc/auth.ts.Tests:
__tests__/auth-scoped.test.tsen__tests__/heartbeat-user-id-refresh.test.ts. Lokaalnpm run typecheckschoon ennpm test1816 geslaagd / 51 overgeslagen.Nog niet uitgerold. De final-release-job op main faalde voor beide merges (runs 223 en 225) op een timeout in
__tests__/packaged-release.test.ts, die los staat van deze wijziging. Daardoor is er geen pakket en geendeploy/*-tag voor4c9489fofd9e825f; de laatste gepubliceerde versie isc20688e, zonder deze fix.