fix(api-auth): verlopen API-token weigeren in authenticateApiRequest (ISS-2) #265

Merged
janpeter merged 1 commit from fix/api-token-expiry into main 2026-09-27 19:26:13 +02:00
Owner

Probleem

authenticateApiRequest() in lib/api-auth.ts controleerde op het Bearer-pad alleen revoked_at. Een token met expires_at in het verleden bleef daardoor werken op alle REST-routes die deze functie gebruiken, terwijl de workers-UI het als "Verlopen" toont.

Wijziging

Een token met expires_at <= now krijgt dezelfde 401 Unauthorized als een ingetrokken token. Grens gelijk aan het dispatchpad in scrum4me-mcp: geldig is alleen expires_at IS NULL of > now.

Tests

Nieuw: __tests__/lib/api-auth.test.ts: verlopen geweigerd, zonder vervaldatum geaccepteerd, toekomstige vervaldatum geaccepteerd, en geen terugval op de sessie-cookie bij een verlopen Bearer-token. De weiger-test faalde voor de fix.

tsc --noEmit, eslint op de gewijzigde bestanden en npm test: 2920 geslaagd, 6 overgeslagen.

Let op bij uitrol

Niet-ingetrokken tokens die al verlopen zijn, worden na deze wijziging geweigerd. JP controleert dat voor de merge.

Zuster-PR in scrum4me-mcp voor src/auth.ts (ISS-9).

🤖 Generated with Claude Code

## Probleem `authenticateApiRequest()` in `lib/api-auth.ts` controleerde op het Bearer-pad alleen `revoked_at`. Een token met `expires_at` in het verleden bleef daardoor werken op alle REST-routes die deze functie gebruiken, terwijl de workers-UI het als "Verlopen" toont. ## Wijziging Een token met `expires_at <= now` krijgt dezelfde `401 Unauthorized` als een ingetrokken token. Grens gelijk aan het dispatchpad in scrum4me-mcp: geldig is alleen `expires_at IS NULL` of `> now`. ## Tests Nieuw: `__tests__/lib/api-auth.test.ts`: verlopen geweigerd, zonder vervaldatum geaccepteerd, toekomstige vervaldatum geaccepteerd, en geen terugval op de sessie-cookie bij een verlopen Bearer-token. De weiger-test faalde voor de fix. `tsc --noEmit`, eslint op de gewijzigde bestanden en `npm test`: 2920 geslaagd, 6 overgeslagen. ## Let op bij uitrol Niet-ingetrokken tokens die al verlopen zijn, worden na deze wijziging geweigerd. JP controleert dat voor de merge. Zuster-PR in scrum4me-mcp voor `src/auth.ts` (ISS-9). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(api-auth): verlopen API-token weigeren in authenticateApiRequest (ISS-2)
All checks were successful
CI / Lint, Typecheck, Test & Build (pull_request) Successful in 4m19s
CI / DB Access Policy Gate (pull_request) Successful in 1m43s
CI / Queue Dispatch Guard Gate (pull_request) Successful in 1m41s
CI / Deploy Manual (workflow_dispatch) (pull_request) Has been skipped
CI / DB Access Production Sentinel (pull_request) Successful in 1m45s
CI / Detect deploy-relevant changes (pull_request) Has been skipped
CI / Deploy Preview (PR) (pull_request) Has been skipped
CI / Deploy Production (main) (pull_request) Has been skipped
9d0f51de8d
Het Bearer-pad controleerde alleen revoked_at, waardoor een token met
expires_at in het verleden op alle REST-routes bleef werken terwijl de
workers-UI het als "Verlopen" toont. De grens volgt het dispatchpad in
scrum4me-mcp: geldig is alleen expires_at IS NULL of > now.

Een verlopen token krijgt dezelfde 401 als een ingetrokken token en valt
niet terug op de sessie-cookie.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
s4m-codex-reviewer left a comment

APPROVED

  • Geen findings met blokkerende of error-severity. De Bearer-tokenvalidatie weigert nu terecht verlopen tokens, behoudt de bestaande 401-respons en voorkomt sessie-fallback; de toegevoegde tests dekken verlopen, niet-verlopende en toekomstige vervaldatums.
  • geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
## APPROVED - Geen findings met blokkerende of error-severity. De Bearer-tokenvalidatie weigert nu terecht verlopen tokens, behoudt de bestaande 401-respons en voorkomt sessie-fallback; de toegevoegde tests dekken verlopen, niet-verlopende en toekomstige vervaldatums. - geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/Scrum4Me!265
No description provided.