Nonce and clock
Nonce and clock binding on every request; replays are refused before they touch the database.
A used challenge is refused even when the answer was lost; the client discards that token and re-initializes with a fresh nonce. Strict retry semantics were chosen over response caching, which would have required encrypted bearer material.