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

## DPoPUserInfoValidator Class

Resource\-server\-side enforcement of RFC 9449 DPoP at the UserInfo endpoint\. Mirrors the
shape of [DPoPTokenEndpointValidator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Token.Validation.DPoPTokenEndpointValidator 'Abblix\.Oidc\.Server\.Endpoints\.Token\.Validation\.DPoPTokenEndpointValidator') so the
branching logic stays symmetric across endpoints; differences are limited to the
trigger \(`cnf.jkt` on the inbound access token\) and the error envelope \(typed
[InvalidDPoPProofError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.InvalidDPoPProofError 'Abblix\.Oidc\.Server\.Common\.InvalidDPoPProofError') / [UseDPoPNonceError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.UseDPoPNonceError 'Abblix\.Oidc\.Server\.Common\.UseDPoPNonceError') so the response
formatter can emit the §7\.1 `WWW-Authenticate: DPoP` challenge\)\.

```csharp
public class DPoPUserInfoValidator : Abblix.Oidc.Server.Features.DPoP.DPoPNonceValidator, Abblix.Oidc.Server.Endpoints.UserInfo.Interfaces.IDPoPUserInfoValidator
```

Inheritance [System\.Object](https://learn.microsoft.com/en-us/dotnet/api/system.object 'System\.Object') → [DPoPNonceValidator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.DPoPNonceValidator 'Abblix\.Oidc\.Server\.Features\.DPoP\.DPoPNonceValidator') → DPoPUserInfoValidator

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

## DPoPUserInfoValidator\(ILogger\<DPoPUserInfoValidator\>, IProofValidator, INonceService, IOptionsMonitor\<OidcOptions\>\) Constructor {#Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator.DPoPUserInfoValidator(Microsoft.Extensions.Logging.ILogger_Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator_,Abblix.Oidc.Server.Features.DPoP.IProofValidator,Abblix.Oidc.Server.Features.Nonces.INonceService,Microsoft.Extensions.Options.IOptionsMonitor_Abblix.Oidc.Server.Common.Configuration.OidcOptions_)}

Resource\-server\-side enforcement of RFC 9449 DPoP at the UserInfo endpoint\. Mirrors the
shape of [DPoPTokenEndpointValidator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.Token.Validation.DPoPTokenEndpointValidator 'Abblix\.Oidc\.Server\.Endpoints\.Token\.Validation\.DPoPTokenEndpointValidator') so the
branching logic stays symmetric across endpoints; differences are limited to the
trigger \(`cnf.jkt` on the inbound access token\) and the error envelope \(typed
[InvalidDPoPProofError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.InvalidDPoPProofError 'Abblix\.Oidc\.Server\.Common\.InvalidDPoPProofError') / [UseDPoPNonceError](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.UseDPoPNonceError 'Abblix\.Oidc\.Server\.Common\.UseDPoPNonceError') so the response
formatter can emit the §7\.1 `WWW-Authenticate: DPoP` challenge\)\.

```csharp
public DPoPUserInfoValidator(Microsoft.Extensions.Logging.ILogger<Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator> logger, Abblix.Oidc.Server.Features.DPoP.IProofValidator proofValidator, Abblix.Oidc.Server.Features.Nonces.INonceService nonceService, Microsoft.Extensions.Options.IOptionsMonitor<Abblix.Oidc.Server.Common.Configuration.OidcOptions> options);
```
#### Parameters

###### `logger` [Microsoft\.Extensions\.Logging\.ILogger&lt;](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.ilogger-1 'Microsoft\.Extensions\.Logging\.ILogger\`1')[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')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.ilogger-1 'Microsoft\.Extensions\.Logging\.ILogger\`1') {#Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator.DPoPUserInfoValidator(Microsoft.Extensions.Logging.ILogger_Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator_,Abblix.Oidc.Server.Features.DPoP.IProofValidator,Abblix.Oidc.Server.Features.Nonces.INonceService,Microsoft.Extensions.Options.IOptionsMonitor_Abblix.Oidc.Server.Common.Configuration.OidcOptions_).logger}

###### `proofValidator` [IProofValidator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.DPoP.IProofValidator 'Abblix\.Oidc\.Server\.Features\.DPoP\.IProofValidator') {#Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator.DPoPUserInfoValidator(Microsoft.Extensions.Logging.ILogger_Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator_,Abblix.Oidc.Server.Features.DPoP.IProofValidator,Abblix.Oidc.Server.Features.Nonces.INonceService,Microsoft.Extensions.Options.IOptionsMonitor_Abblix.Oidc.Server.Common.Configuration.OidcOptions_).proofValidator}

###### `nonceService` [INonceService](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.Nonces.INonceService 'Abblix\.Oidc\.Server\.Features\.Nonces\.INonceService') {#Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator.DPoPUserInfoValidator(Microsoft.Extensions.Logging.ILogger_Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator_,Abblix.Oidc.Server.Features.DPoP.IProofValidator,Abblix.Oidc.Server.Features.Nonces.INonceService,Microsoft.Extensions.Options.IOptionsMonitor_Abblix.Oidc.Server.Common.Configuration.OidcOptions_).nonceService}

###### `options` [Microsoft\.Extensions\.Options\.IOptionsMonitor&lt;](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.options.ioptionsmonitor-1 'Microsoft\.Extensions\.Options\.IOptionsMonitor\`1')[OidcOptions](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.OidcOptions 'Abblix\.Oidc\.Server\.Common\.Configuration\.OidcOptions')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.options.ioptionsmonitor-1 'Microsoft\.Extensions\.Options\.IOptionsMonitor\`1') {#Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator.DPoPUserInfoValidator(Microsoft.Extensions.Logging.ILogger_Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator_,Abblix.Oidc.Server.Features.DPoP.IProofValidator,Abblix.Oidc.Server.Features.Nonces.INonceService,Microsoft.Extensions.Options.IOptionsMonitor_Abblix.Oidc.Server.Common.Configuration.OidcOptions_).options}
### Methods

## DPoPUserInfoValidator\.ValidateAsync\(ClientRequest, JsonWebToken, string\) Method {#Abblix.Oidc.Server.Endpoints.UserInfo.Validation.DPoPUserInfoValidator.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
public 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.Validation.DPoPUserInfoValidator.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.Validation.DPoPUserInfoValidator.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.Validation.DPoPUserInfoValidator.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))`\.

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

#### 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')
