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

## ClientValidator Class

Resolves the client referenced by the request \(either via `client_id` directly or via
`id_token_hint`'s audience\) into a [ClientInfo](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.ClientInfo 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.ClientInfo') stored on the context for
later steps such as post\-logout redirect URI validation\. A request with no client identifier
at all is permitted to pass; an identifier that does not resolve yields
[UnauthorizedClient](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Constants.ErrorCodes#Abblix.Oidc.Server.Common.Constants.ErrorCodes.UnauthorizedClient 'Abblix\.Oidc\.Server\.Common\.Constants\.ErrorCodes\.UnauthorizedClient')\.

```csharp
public class ClientValidator : Abblix.Oidc.Server.Endpoints.EndSession.Validation.IEndSessionContextValidator
```

Inheritance [System\.Object](https://learn.microsoft.com/en-us/dotnet/api/system.object 'System\.Object') → ClientValidator

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

## ClientValidator\(ILogger\<ClientValidator\>, IClientInfoProvider\) Constructor {#Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator.ClientValidator(Microsoft.Extensions.Logging.ILogger_Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator_,Abblix.Oidc.Server.Features.ClientInformation.IClientInfoProvider)}

Resolves the client referenced by the request \(either via `client_id` directly or via
`id_token_hint`'s audience\) into a [ClientInfo](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.ClientInfo 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.ClientInfo') stored on the context for
later steps such as post\-logout redirect URI validation\. A request with no client identifier
at all is permitted to pass; an identifier that does not resolve yields
[UnauthorizedClient](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Constants.ErrorCodes#Abblix.Oidc.Server.Common.Constants.ErrorCodes.UnauthorizedClient 'Abblix\.Oidc\.Server\.Common\.Constants\.ErrorCodes\.UnauthorizedClient')\.

```csharp
public ClientValidator(Microsoft.Extensions.Logging.ILogger<Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator> logger, Abblix.Oidc.Server.Features.ClientInformation.IClientInfoProvider clientInfoProvider);
```
#### 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')[ClientValidator](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator 'Abblix\.Oidc\.Server\.Endpoints\.EndSession\.Validation\.ClientValidator')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.ilogger-1 'Microsoft\.Extensions\.Logging\.ILogger\`1') {#Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator.ClientValidator(Microsoft.Extensions.Logging.ILogger_Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator_,Abblix.Oidc.Server.Features.ClientInformation.IClientInfoProvider).logger}

###### `clientInfoProvider` [IClientInfoProvider](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.IClientInfoProvider 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.IClientInfoProvider') {#Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator.ClientValidator(Microsoft.Extensions.Logging.ILogger_Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator_,Abblix.Oidc.Server.Features.ClientInformation.IClientInfoProvider).clientInfoProvider}
### Methods

## ClientValidator\.ValidateAsync\(EndSessionValidationContext\) Method {#Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator.ValidateAsync(Abblix.Oidc.Server.Endpoints.EndSession.Validation.EndSessionValidationContext)}

Performs this validator's check against the shared context\.

```csharp
public System.Threading.Tasks.Task<Abblix.Oidc.Server.Common.OidcError?> ValidateAsync(Abblix.Oidc.Server.Endpoints.EndSession.Validation.EndSessionValidationContext context);
```
#### Parameters

###### `context` [EndSessionValidationContext](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.EndSession.Validation.EndSessionValidationContext 'Abblix\.Oidc\.Server\.Endpoints\.EndSession\.Validation\.EndSessionValidationContext') {#Abblix.Oidc.Server.Endpoints.EndSession.Validation.ClientValidator.ValidateAsync(Abblix.Oidc.Server.Endpoints.EndSession.Validation.EndSessionValidationContext).context}

Mutable validation context shared with subsequent steps; this validator may
populate fields \(such as resolved `ClientInfo` or parsed `id_token_hint`\)\.

Implements [ValidateAsync\(EndSessionValidationContext\)](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Endpoints.EndSession.Validation.IEndSessionContextValidator#Abblix.Oidc.Server.Endpoints.EndSession.Validation.IEndSessionContextValidator.ValidateAsync(Abblix.Oidc.Server.Endpoints.EndSession.Validation.EndSessionValidationContext) 'Abblix\.Oidc\.Server\.Endpoints\.EndSession\.Validation\.IEndSessionContextValidator\.ValidateAsync\(Abblix\.Oidc\.Server\.Endpoints\.EndSession\.Validation\.EndSessionValidationContext\)')

#### 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')  
`null` if the request passes this step, otherwise the error to surface\.
