Table of Contents

Class DPoPProofReplayDetectedEvent

Namespace
Fdyay.IdentityServer.Events
Assembly
Fdyay.IdentityServer.Core.dll

A DPoP proof was presented for a second time.

public class DPoPProofReplayDetectedEvent : Event
Inheritance
DPoPProofReplayDetectedEvent
Inherited Members

Remarks

The twin of RefreshTokenReplayDetectedEvent, and it exists for the reason that one does: a credential presented twice is not a client that is broken, it is somebody using a copy. This server has detected proof replay since 0.17.0 and refused it in silence until 0.38.0, so a proof lifted off the wire and re-presented left nothing for a host to count.

Information rather than Failure, matching the refresh event: the request was refused correctly, and what is worth telling a host is not that a request failed but that a proof exists in two places.

Raised for replay alone, not for every proof this server turns down. A malformed proof is a broken client and a stale one is usually a drifting clock; reporting those under the same name is how the signal that means somebody has a copy stops being a signal.

It names no client, unlike its twin, and that is not an oversight: a proof is validated against the request it claims to be for, and DPoPProofValidationContext carries no client because nothing in the validation needs one. A member added here to hold a value the only raise site cannot fill is the defect §1e catalogues, arriving as a courtesy. What ties this to a caller is what the event service fills in for every event — the address it came from and the activity it belonged to — which is also what a host counting replays per source would group on.

Constructors

DPoPProofReplayDetectedEvent()

A DPoP proof presented a second time. It carries no fields of its own; the event service fills in the caller's address and activity.

public DPoPProofReplayDetectedEvent()