#### [Abblix\.Oidc\.Server](https://www.abblix.com/en/docs/api/abblix-oidc-server 'index')
### [Abblix\.Oidc\.Server\.Features\.DPoP](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP 'Abblix\.Oidc\.Server\.Features\.DPoP')

## IProofValidator Interface

Validates a DPoP proof JWT per RFC 9449 §4\.2 / §4\.3 \(structure, signature, claim
shape\) but excluding replay\-cache and nonce checks\. Those layered checks land
alongside the `jti`\-replay\-cache and DPoP\-Nonce service in a separate slice and
build on the [Proof](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.Proof 'Abblix\.Oidc\.Server\.Features\.DPoP\.Proof') returned by a successful validation here\.

```csharp
public interface IProofValidator
```
### Methods

## IProofValidator\.ValidateAsync\(string, string, CancellationToken\) Method {#Abblix.Oidc.Server.Features.DPoP.IProofValidator.ValidateAsync(string,string,System.Threading.CancellationToken)}

Validates [proofJwt](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.IProofValidator#Abblix.Oidc.Server.Features.DPoP.IProofValidator.ValidateAsync(string,string,System.Threading.CancellationToken).proofJwt 'Abblix\.Oidc\.Server\.Features\.DPoP\.IProofValidator\.ValidateAsync\(string, string, System\.Threading\.CancellationToken\)\.proofJwt') as a DPoP proof for the current request\.
The HTTP method and URI used for `htm` / `htu` binding checks come from
[IRequestInfoProvider](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Interfaces.IRequestInfoProvider 'Abblix\.Oidc\.Server\.Common\.Interfaces\.IRequestInfoProvider') injected
into the validator, so callers never need to thread them through\. When
[accessToken](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.IProofValidator#Abblix.Oidc.Server.Features.DPoP.IProofValidator.ValidateAsync(string,string,System.Threading.CancellationToken).accessToken 'Abblix\.Oidc\.Server\.Features\.DPoP\.IProofValidator\.ValidateAsync\(string, string, System\.Threading\.CancellationToken\)\.accessToken') is supplied \(the proof accompanies a bearer\-style
access\-token presentation\), the proof's `ath` claim is verified against the
access\-token hash per RFC 9449 §4\.2\.

```csharp
System.Threading.Tasks.Task<Abblix.Utils.Result<Abblix.Oidc.Server.Features.DPoP.Proof,Abblix.Oidc.Server.Features.DPoP.ProofError>> ValidateAsync(string proofJwt, string? accessToken=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));
```
#### Parameters

###### `proofJwt` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Features.DPoP.IProofValidator.ValidateAsync(string,string,System.Threading.CancellationToken).proofJwt}

The compact JWS form of the DPoP proof, taken from the
            `DPoP` request header\.

###### `accessToken` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Features.DPoP.IProofValidator.ValidateAsync(string,string,System.Threading.CancellationToken).accessToken}

The access token presented alongside the proof, when the
            proof secures a resource\-server request\. `null` at the token endpoint where no
            access token is yet bound\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.Oidc.Server.Features.DPoP.IProofValidator.ValidateAsync(string,string,System.Threading.CancellationToken).cancellationToken}

Cancellation token for the asynchronous call\.

#### Returns
[System\.Threading\.Tasks\.Task&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')[Abblix\.Utils\.Result&lt;](https://learn.microsoft.com/en-us/dotnet/api/abblix.utils.result-2 'Abblix\.Utils\.Result\`2')[Proof](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.Proof 'Abblix\.Oidc\.Server\.Features\.DPoP\.Proof')[,](https://learn.microsoft.com/en-us/dotnet/api/abblix.utils.result-2 'Abblix\.Utils\.Result\`2')[ProofError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.ProofError 'Abblix\.Oidc\.Server\.Features\.DPoP\.ProofError')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/abblix.utils.result-2 'Abblix\.Utils\.Result\`2')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')  
A [Abblix\.Utils\.Result&lt;&gt;](https://learn.microsoft.com/en-us/dotnet/api/abblix.utils.result-2 'Abblix\.Utils\.Result\`2'): [Proof](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.Proof 'Abblix\.Oidc\.Server\.Features\.DPoP\.Proof') when every
            validation step passes, otherwise [ProofError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.ProofError 'Abblix\.Oidc\.Server\.Features\.DPoP\.ProofError') describing the failure
            reason\.
