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

## ClientSecretsOptionsValidator Class

Fails loudly at startup when a configured client cannot authenticate with the secret it appears
to carry, instead of answering `invalid_client` to every request it ever makes\.

```csharp
public class ClientSecretsOptionsValidator : Microsoft.Extensions.Options.IValidateOptions<Abblix.Oidc.Server.Common.Configuration.OidcOptions>
```

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

Implements [Microsoft\.Extensions\.Options\.IValidateOptions&lt;](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.options.ivalidateoptions-1 'Microsoft\.Extensions\.Options\.IValidateOptions\`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.ivalidateoptions-1 'Microsoft\.Extensions\.Options\.IValidateOptions\`1')

### Remarks
A registry kept in configuration makes a mistyped hash easy and its consequences invisible\. The
\.NET configuration binder discards an element whose binding threw, so a hash the file spells
wrongly leaves the client with no secret at all rather than with a bad one, and nothing downstream
distinguishes that from a client deliberately registered without secrets: the token endpoint
simply refuses it, logging at debug level\. A hash of the wrong length is the same mistake caught
one step later \- a digest pasted into the wrong notation decodes without error and compares
against nothing\.
