feat(common-oauth): DPoP nonce rotation in RelyingParty
Added dpop_nonces field (Mutex<HashMap<Url, String>>) to RelyingParty to track
DPoP nonces by endpoint URL. Nonces are extracted from DPoP-Nonce response
headers during PAR retry and included in subsequent DPoP proofs.
Changes:
- RelyingParty struct: added dpop_nonces field
- RelyingParty::new(): initialize dpop_nonces as empty HashMap
- sign_dpop(): check dpop_nonces map and include nonce claim if present
- do_par(): on 400 use_dpop_nonce error, extract DPoP-Nonce header, store
nonce, re-sign DPoP with nonce, and retry the request
Enables RFC 9449 DPoP nonce rotation per AC7.1 requirements.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>