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

## ClientJwksConfigurationExtensions Class

Configuration\-time extensions that populate [Jwks](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.ClientInfo#Abblix.Oidc.Server.Features.ClientInformation.ClientInfo.Jwks 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.ClientInfo\.Jwks') from raw
configuration sections by binding into [JsonWebKeySetSettings](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.JsonWebKeySetSettings 'Abblix\.Oidc\.Server\.Common\.Configuration\.JsonWebKeySetSettings') \(a flat
DTO that [Microsoft\.Extensions\.Configuration](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration 'Microsoft\.Extensions\.Configuration') can handle natively\) and
mapping to the polymorphic [JsonWebKey](https://www.abblix.com/en/docs/api/abblix-jwt/Abblix.Jwt.JsonWebKey 'Abblix\.Jwt\.JsonWebKey') hierarchy\.

```csharp
public static class ClientJwksConfigurationExtensions
```

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

### Remarks
The same primitive is exposed at two layers so the host can apply the fix as close
to the source binding as practical:
- `settings.Clients.WithJwksFromConfiguration(section)` — eager, runs right after
              `configuration.Get<Settings>()`, so every later consumer of
              `settings.Clients` sees populated `Jwks`.
- `options.AddClientJwksFromConfiguration(section)` — convenience inside the
              `AddOidcServices` options lambda, equivalent to mutating
              `options.Clients` through `WithJwksFromConfiguration`.
### Methods

## ClientJwksConfigurationExtensions\.AddClientJwksFromConfiguration\(this OidcOptions, IConfigurationSection\) Method {#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.AddClientJwksFromConfiguration(thisAbblix.Oidc.Server.Common.Configuration.OidcOptions,Microsoft.Extensions.Configuration.IConfigurationSection)}

Convenience wrapper for use inside the `AddOidcServices` options lambda:
equivalent to `options.Clients = options.Clients.WithJwksFromConfiguration(section)`\.

```csharp
public static void AddClientJwksFromConfiguration(this Abblix.Oidc.Server.Common.Configuration.OidcOptions options, Microsoft.Extensions.Configuration.IConfigurationSection clientsSection);
```
#### Parameters

###### `options` [OidcOptions](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.OidcOptions 'Abblix\.Oidc\.Server\.Common\.Configuration\.OidcOptions') {#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.AddClientJwksFromConfiguration(thisAbblix.Oidc.Server.Common.Configuration.OidcOptions,Microsoft.Extensions.Configuration.IConfigurationSection).options}

###### `clientsSection` [Microsoft\.Extensions\.Configuration\.IConfigurationSection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration.iconfigurationsection 'Microsoft\.Extensions\.Configuration\.IConfigurationSection') {#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.AddClientJwksFromConfiguration(thisAbblix.Oidc.Server.Common.Configuration.OidcOptions,Microsoft.Extensions.Configuration.IConfigurationSection).clientsSection}

## ClientJwksConfigurationExtensions\.WithJwksFromConfiguration\<T\>\(this IEnumerable\<T\>, IConfigurationSection\) Method {#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection)}

Returns the same client collection with [Jwks](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.ClientInfo#Abblix.Oidc.Server.Features.ClientInformation.ClientInfo.Jwks 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.ClientInfo\.Jwks') populated for
each entry whose configuration counterpart includes an inline `Jwks` sub\-section\.
Mutates in place when the input is already a [T](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection).T 'Abblix\.Oidc\.Server\.Common\.Configuration\.ClientJwksConfigurationExtensions\.WithJwksFromConfiguration\<T\>\(this System\.Collections\.Generic\.IEnumerable\<T\>, Microsoft\.Extensions\.Configuration\.IConfigurationSection\)\.T') array; otherwise
materialises a fresh array\.

```csharp
public static T[] WithJwksFromConfiguration<T>(this System.Collections.Generic.IEnumerable<T> clients, Microsoft.Extensions.Configuration.IConfigurationSection clientsSection)
    where T : Abblix.Oidc.Server.Features.ClientInformation.ClientInfo;
```
#### Type parameters

###### `T` {#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection).T}

A concrete client type — either [ClientInfo](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.ClientInfo 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.ClientInfo') directly
            or a host\-supplied derived type \(e\.g\. carrying app\-specific metadata\)\. The return type
            preserves [T](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection).T 'Abblix\.Oidc\.Server\.Common\.Configuration\.ClientJwksConfigurationExtensions\.WithJwksFromConfiguration\<T\>\(this System\.Collections\.Generic\.IEnumerable\<T\>, Microsoft\.Extensions\.Configuration\.IConfigurationSection\)\.T') so the host can assign the result back to its own
            strongly\-typed `Clients` array without casting\.
#### Parameters

###### `clients` [System\.Collections\.Generic\.IEnumerable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1')[T](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection).T 'Abblix\.Oidc\.Server\.Common\.Configuration\.ClientJwksConfigurationExtensions\.WithJwksFromConfiguration\<T\>\(this System\.Collections\.Generic\.IEnumerable\<T\>, Microsoft\.Extensions\.Configuration\.IConfigurationSection\)\.T')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1 'System\.Collections\.Generic\.IEnumerable\`1') {#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection).clients}

The clients whose `Jwks` should be populated\.

###### `clientsSection` [Microsoft\.Extensions\.Configuration\.IConfigurationSection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration.iconfigurationsection 'Microsoft\.Extensions\.Configuration\.IConfigurationSection') {#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection).clientsSection}

The configuration section that holds the Clients tree —
            typically `configuration.GetSection("Clients")`\.

#### Returns
[T](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection).T 'Abblix\.Oidc\.Server\.Common\.Configuration\.ClientJwksConfigurationExtensions\.WithJwksFromConfiguration\<T\>\(this System\.Collections\.Generic\.IEnumerable\<T\>, Microsoft\.Extensions\.Configuration\.IConfigurationSection\)\.T')[\[\]](https://learn.microsoft.com/en-us/dotnet/api/system.array 'System\.Array')  
The same clients \(as an array\) with any newly populated `Jwks`\.

#### Exceptions

[System\.InvalidOperationException](https://learn.microsoft.com/en-us/dotnet/api/system.invalidoperationexception 'System\.InvalidOperationException')  
A `Jwks` sub\-section contains a key
            with a missing or unsupported `kty` discriminator\.

[System\.FormatException](https://learn.microsoft.com/en-us/dotnet/api/system.formatexception 'System\.FormatException')  
A byte\-array member of a JWK is not valid
            base64url\.

### Remarks

Per-client self-correcting: an entry whose [Jwks](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Features.ClientInformation.ClientInfo#Abblix.Oidc.Server.Features.ClientInformation.ClientInfo.Jwks 'Abblix\.Oidc\.Server\.Features\.ClientInformation\.ClientInfo\.Jwks') is already
non-null (because the host populated it programmatically or a future TFM's binder
gained native polymorphic support) is skipped.

Configuration entries without a matching `ClientId` in [clients](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions#Abblix.Oidc.Server.Common.Configuration.ClientJwksConfigurationExtensions.WithJwksFromConfiguration_T_(thisSystem.Collections.Generic.IEnumerable_T_,Microsoft.Extensions.Configuration.IConfigurationSection).clients 'Abblix\.Oidc\.Server\.Common\.Configuration\.ClientJwksConfigurationExtensions\.WithJwksFromConfiguration\<T\>\(this System\.Collections\.Generic\.IEnumerable\<T\>, Microsoft\.Extensions\.Configuration\.IConfigurationSection\)\.clients')
are silently skipped, so the same `appsettings.json` can declare clients that only
some deployments load.
