v0.7.0
[0.7.0]
Compatibility release from live-integration feedback: gives hosts a clean "2FA actually passed" signal
instead of forcing them to reconstruct one from audit events. OpenAPI moves to 0.7.0.
Added
- Verified-handoff token —
challenge/verifyandchallenge/recovery-codenow return a short-livedverifiedToken(purpose=2fa-verified) alongsideuserId. The frontend forwards it to the host's finalize endpoint, which calls the newIPreAuthTokenIssuer.ValidateVerified(token)to recover the trusted user id and mint the session. NewIssueVerified/ValidateVerifiedonIPreAuthTokenIssuer;PreAuth.VerifiedTtloption (default 2 min).VerifySuccessResponsegainsverifiedToken+expiresAt; surfaced in the TS challenge machine ascontext.verifiedToken.
Fixed
- 2FA bypass in the host finalize pattern — finalize must validate the verified-handoff token, not the pre-auth token. The pre-auth token is minted right after the password step, so re-validating it (as the example previously did) let anyone who passed the password — but not 2FA — mint a session. The example now validates
verifiedToken. - Recovery-code "verified" signal — a recovery-code login previously emitted only the
RecoveryCodeUsedaudit event, so a host inferring success fromLoginVerifySucceededsilently rejected it. Both paths now return the sameverifiedToken, so recovery is no longer a special case. This also removes the per-user race in audit-based gates: the token is bound to the ceremony, not the user.
Changed
- Docs (
README,FLOWS,ASPNETCORE) and theexamples/fullhost updated to the verified-handoff finalize flow.