feat(ociserve): meld opnieuw aan als de organisatie een sterkere aanmelding eist #2385
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!2385
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/ociserve-step-up-challenge"
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?
Aanleiding
OciServe kan een organisatie een recente of sterkere aanmelding laten eisen (strikt toegangsbeleid, OciServe #652). De server antwoordt dan
401met een RFC 9470-uitdaging (insufficient_user_authentication,acr_values,max_age). OciDeck behandelde elke401als "uitgelogd". Dat helpt niet: een token vernieuwen levert dezelfdeauth_timeenacr, en opnieuw inloggen zondermax_agelaat Keycloak de bestaande browsersessie hergebruiken. Het resultaat was een inloglus. Dit is de clientkant. Het is achterwaarts compatibel: zonder uitdaging verandert er niets.Wat dit doet
_sendherkent de uitdaging (parseOciServeStepUpChallenge) en herhaalt het verzoek één keer met het verse token, met dezelfde methode, URL, body enIdempotency-Key. Alle 26 aanroepplekken in de provider blijven ongewijzigd. Een tweede uitdaging is een fout, geen lus.login(stepUp:)zetacr_valuesenmax_agein het autorisatieverzoek.Veiligheid, elk met een test die rood wordt als het ontbreekt
/mehetzelfde account en een actief lidmaatschap toont. Een ander account in de browser (gedeelde computer) wordt geweigerd en de eigen sessie blijft staan.acrvan afdrukbaar ASCII, een leeftijd tot 366 dagen, enerrormoet een echte parameter zijn.Tests en bewijs
Drie niveaus (parser en gateway, authenticator, provider). Elke regel is rood bewezen door hem gericht te breken: ruim twintig mutaties. Twee zwakke plekken die dat aan het licht bracht zijn eerst verholpen: de test voor "uitgelogd tijdens het wachten" ving de verwijdering van de generatiecontroles niet (een andere bewaking dekte het toevallig; nu getest met en zonder opslag), en de mutaties van het sluiten van lessessies waren zelf kapot. Ook één harnasfout van mijn kant: een mutatie liet de type-controle vallen en gaf een compileerfout in plaats van een rode test; die is herhaald met een mutatie die wel compileert.
Poorten
make checkvolledig groen (exit 0, uit het logbestand gelezen) op099c4200b: statische poorten, volledige suite, coverage, per-bestandsvloer, pakketten en golden.make check-secretsenmake sastgroen op diezelfde commit (0 findings).mainis daarna niet verschoven.Bewaker-weging
Raakt een sleutel (het vernieuwtoken wordt bijgewerkt) en een belofte in de documentatie, dus de bewaker heeft gekeken.
Beperkingen
acr-eis werkt pas als Keycloakacruitgeeft (nu niet; zie ADR 0017). Een striktemax_auth_agewerkt direct.🤖 Generated with Claude Code