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

## IDPoPUserInfoValidator Interface

Validates the DPoP\-binding contract on a UserInfo request per RFC 9449 §7\.1: when the
inbound access token is DPoP\-bound \(carries `cnf.jkt`\), the request MUST present
`Authorization: DPoP <token>` together with a valid `DPoP` header
proof whose key thumbprint matches the access token's `cnf.jkt` and whose
`ath` claim equals `Base64Url(SHA-256(access_token))`\. Unbound \(Bearer\)
access tokens passed via the Bearer scheme bypass the check\.

```csharp
public interface IDPoPUserInfoValidator
```

Derived  
↳ [DPoPUserInfoValidator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator 'Abblix\.Oidc\.Server\.Endpoints\.UserInfo\.Validation\.DPoPUserInfoValidator')
### Methods

## IDPoPUserInfoValidator\.ValidateAsync\(ClientRequest, JsonWebToken, string\) Method {#Abblix.Oidc.Server.Endpoints.UserInfo.Interfaces.IDPoPUserInfoValidator.ValidateAsync(Abblix.Oidc.Server.Model.ClientRequest,Abblix.Jwt.JsonWebToken,string)}

Returns `null` on success, an [OidcError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.OidcError 'Abblix\.Oidc\.Server\.Common\.OidcError') describing the binding
failure otherwise\. The typed subclasses [InvalidDPoPProofError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.InvalidDPoPProofError 'Abblix\.Oidc\.Server\.Common\.InvalidDPoPProofError') and
[UseDPoPNonceError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.UseDPoPNonceError 'Abblix\.Oidc\.Server\.Common\.UseDPoPNonceError') let the response formatter pattern\-match for the
RFC 9449 §7\.1 `WWW-Authenticate: DPoP` challenge or the §8 nonce response
header attachment\.

```csharp
System.Threading.Tasks.Task<Abblix.Oidc.Server.Common.OidcError?> ValidateAsync(Abblix.Oidc.Server.Model.ClientRequest clientRequest, Abblix.Jwt.JsonWebToken accessToken, string rawAccessToken);
```
#### Parameters

###### `clientRequest` [ClientRequest](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Model.ClientRequest 'Abblix\.Oidc\.Server\.Model\.ClientRequest') {#Abblix.Oidc.Server.Endpoints.UserInfo.Interfaces.IDPoPUserInfoValidator.ValidateAsync(Abblix.Oidc.Server.Model.ClientRequest,Abblix.Jwt.JsonWebToken,string).clientRequest}

Carries the `Authorization` scheme \+ token plus
            the optional `DPoP` proof header\.

###### `accessToken` [JsonWebToken](https://www.abblix.com/en/docs/api/abblix-jwt/Abblix.Jwt.JsonWebToken 'Abblix\.Jwt\.JsonWebToken') {#Abblix.Oidc.Server.Endpoints.UserInfo.Interfaces.IDPoPUserInfoValidator.ValidateAsync(Abblix.Oidc.Server.Model.ClientRequest,Abblix.Jwt.JsonWebToken,string).accessToken}

The parsed access\-token JWT whose `cnf.jkt`
            \(when present\) the proof must match\.

###### `rawAccessToken` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Endpoints.UserInfo.Interfaces.IDPoPUserInfoValidator.ValidateAsync(Abblix.Oidc.Server.Model.ClientRequest,Abblix.Jwt.JsonWebToken,string).rawAccessToken}

The original on\-the\-wire access\-token string used
            to compute `ath = Base64Url(SHA-256(access_token))`\.

#### Returns
[System\.Threading\.Tasks\.Task&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')[OidcError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.OidcError 'Abblix\.Oidc\.Server\.Common\.OidcError')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')
