#### [Abblix\.Jwt](https://www.abblix.com/en/docs/api/abblix-jwt 'index')
### [Abblix\.Jwt](https://www.abblix.com/en/docs/api/abblix-jwt/Abblix.Jwt 'Abblix\.Jwt')

## ServiceCollectionExtensions Class

Provides extension methods for [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') to register JwT\-related services within the application\.

```csharp
public static class ServiceCollectionExtensions
```

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

## ServiceCollectionExtensions\.AddCriticalHeaderHandler\<THandler\>\(this IServiceCollection, string\) Method {#Abblix.Jwt.ServiceCollectionExtensions.AddCriticalHeaderHandler_THandler_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string)}

Registers an [ICriticalHeaderHandler](https://www.abblix.com/en/docs/api/abblix-jwt/Abblix.Jwt.ICriticalHeaderHandler 'Abblix\.Jwt\.ICriticalHeaderHandler') for a single JOSE header extension
parameter listed in a JWS 'crit' array \(RFC 7515 §4\.1\.11\)\. The parameter name is the
DI key, so the registration cannot claim a name without a handler behind it — name and
behaviour are inseparable\.

```csharp
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddCriticalHeaderHandler<THandler>(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, string headerName)
    where THandler : class, Abblix.Jwt.ICriticalHeaderHandler;
```
#### Type parameters

###### `THandler` {#Abblix.Jwt.ServiceCollectionExtensions.AddCriticalHeaderHandler_THandler_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string).THandler}

Concrete handler type\.
#### Parameters

###### `services` [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') {#Abblix.Jwt.ServiceCollectionExtensions.AddCriticalHeaderHandler_THandler_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string).services}

The service collection to register the handler in\.

###### `headerName` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Jwt.ServiceCollectionExtensions.AddCriticalHeaderHandler_THandler_(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,string).headerName}

The JOSE header parameter name the handler implements
            \(byte\-exact per RFC 7515 §5\.3\); used as the DI key the validator routes a 'crit' name
            to\. A handler covering a family of related names registers under each\.

#### Returns
[Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')  
The service collection for method chaining\.

### Remarks
Keyed\-name DI mirrors the signer/encryptor registrations in this assembly
\([Abblix\.Jwt\.ServiceCollectionExtensions\.AddDataSigner&lt;&gt;\.Extensions\.DependencyInjection\.IServiceCollection,System\.String,Abblix\.Jwt\.SigningAlgorithmsProvider\)](https://learn.microsoft.com/en-us/dotnet/api/abblix.jwt.servicecollectionextensions.adddatasigner--2#abblix-jwt-servicecollectionextensions-adddatasigner--2(microsoft-extensions-dependencyinjection-iservicecollection-system-string-abblix-jwt-signingalgorithmsprovider) 'Abblix\.Jwt\.ServiceCollectionExtensions\.AddDataSigner\`\`2\(Microsoft\.Extensions\.DependencyInjection\.IServiceCollection,System\.String,Abblix\.Jwt\.SigningAlgorithmsProvider\)') by 'alg'\): one keyed registration serves
O\(1\) request\-time dispatch \(`GetKeyedService<ICriticalHeaderHandler>(name)`\)\.
[Microsoft\.Extensions\.DependencyInjection\.Extensions\.ServiceCollectionDescriptorExtensions\.TryAddKeyedSingleton&lt;&gt;\.Extensions\.DependencyInjection\.IServiceCollection,System\.Object\)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.extensions.servicecollectiondescriptorextensions.tryaddkeyedsingleton--2#microsoft-extensions-dependencyinjection-extensions-servicecollectiondescriptorextensions-tryaddkeyedsingleton--2(microsoft-extensions-dependencyinjection-iservicecollection-system-object) 'Microsoft\.Extensions\.DependencyInjection\.Extensions\.ServiceCollectionDescriptorExtensions\.TryAddKeyedSingleton\`\`2\(Microsoft\.Extensions\.DependencyInjection\.IServiceCollection,System\.Object\)')
dedups by \(service, key\) first\-wins, so a host pre\-registration for a name wins over a
later default\.

## ServiceCollectionExtensions\.AddJsonWebTokens\(this IServiceCollection\) Method {#Abblix.Jwt.ServiceCollectionExtensions.AddJsonWebTokens(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection)}

Registers services for creating and validating JSON Web Tokens \(JWTs\) within the application\.

```csharp
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddJsonWebTokens(this Microsoft.Extensions.DependencyInjection.IServiceCollection services);
```
#### Parameters

###### `services` [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') {#Abblix.Jwt.ServiceCollectionExtensions.AddJsonWebTokens(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection).services}

The [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') to configure with JWT services\.

#### Returns
[Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')  
The configured [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection'), enabling further chaining of service registrations\.

### Remarks
This method adds services for JWT handling, enabling the application to generate and validate JWTs efficiently\.
JWTs are an essential part of modern web application security, used for representing claims securely between
two parties\.

By registering these services, the application can:
\- Create JWTs with [IJsonWebTokenCreator](https://www.abblix.com/en/docs/api/abblix-jwt/Abblix.Jwt.IJsonWebTokenCreator 'Abblix\.Jwt\.IJsonWebTokenCreator'), allowing for the generation of tokens that can securely
transmit information between parties\.
\- Validate JWTs with [IJsonWebTokenValidator](https://www.abblix.com/en/docs/api/abblix-jwt/Abblix.Jwt.IJsonWebTokenValidator 'Abblix\.Jwt\.IJsonWebTokenValidator'), ensuring that incoming tokens are valid and
have not been tampered with\.

This setup is crucial for implementing authentication and authorization mechanisms that rely on JWTs,
such as OAuth 2\.0 and OpenID Connect\.
