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

## ServiceCollectionExtensions Class

Extension methods for adding OpenID Connect \(OIDC\) server services to the [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')\.
These methods simplify the integration of OIDC server capabilities into an ASP\.NET Core application,
allowing for the configuration of OIDC options and services necessary for authentication and authorization\.

```csharp
public static class ServiceCollectionExtensions
```

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

## ServiceCollectionExtensions\.AddOidcControllers\(this IServiceCollection\) Method {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcControllers(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection)}

Adds OIDC controllers to the MVC application\. This method is used internally to ensure that the OIDC server's
controllers are available to handle authentication and authorization requests\.

```csharp
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddOidcControllers(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.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcControllers(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 add services to\.

#### Returns
[Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')  
The [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') so additional calls can be chained\.

## ServiceCollectionExtensions\.AddOidcMvc\(this IServiceCollection\) Method {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcMvc(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection)}

Adds OIDC MVC services to the specified [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')\.
This method sets up MVC services required for handling OIDC endpoints and requests within an ASP\.NET Core application\.

```csharp
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddOidcMvc(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.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcMvc(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 add services to\.

#### Returns
[Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')  
The [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') so additional calls can be chained\.

## ServiceCollectionExtensions\.AddOidcServices\(this IServiceCollection, Action\<OidcOptions,IServiceProvider\>\) Method {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcServices(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,System.Action_Abblix.Oidc.Server.Common.Configuration.OidcOptions,System.IServiceProvider_)}

Adds OIDC server services to the specified [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') with provided configuration options and service provider\.

```csharp
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddOidcServices(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Abblix.Oidc.Server.Common.Configuration.OidcOptions,System.IServiceProvider> configureOptions);
```
#### Parameters

###### `services` [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcServices(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,System.Action_Abblix.Oidc.Server.Common.Configuration.OidcOptions,System.IServiceProvider_).services}

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

###### `configureOptions` [System\.Action&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.action-2 'System\.Action\`2')[OidcOptions](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.OidcOptions 'Abblix\.Oidc\.Server\.Common\.Configuration\.OidcOptions')[,](https://learn.microsoft.com/en-us/dotnet/api/system.action-2 'System\.Action\`2')[System\.IServiceProvider](https://learn.microsoft.com/en-us/dotnet/api/system.iserviceprovider 'System\.IServiceProvider')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.action-2 'System\.Action\`2') {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcServices(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,System.Action_Abblix.Oidc.Server.Common.Configuration.OidcOptions,System.IServiceProvider_).configureOptions}

A delegate to configure the [OidcOptions](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.OidcOptions 'Abblix\.Oidc\.Server\.Common\.Configuration\.OidcOptions') with the service provider\.

#### Returns
[Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')  
The [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') so additional calls can be chained\.

### Remarks
The request pipeline must call `app.UseCors()` after `app.UseRouting()`; see the
remarks on [AddOidcServices\(this IServiceCollection, Action&lt;OidcOptions&gt;\)](https://www.abblix.com/en/docs/api/abblix-oidc-server-mvc/Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcServices(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,System.Action_Abblix.Oidc.Server.Common.Configuration.OidcOptions_) 'Abblix\.Oidc\.Server\.Mvc\.ServiceCollectionExtensions\.AddOidcServices\(this Microsoft\.Extensions\.DependencyInjection\.IServiceCollection, System\.Action\<Abblix\.Oidc\.Server\.Common\.Configuration\.OidcOptions\>\)') for why the
protocol endpoints refuse to answer without it\.

## ServiceCollectionExtensions\.AddOidcServices\(this IServiceCollection, Action\<OidcOptions\>\) Method {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcServices(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,System.Action_Abblix.Oidc.Server.Common.Configuration.OidcOptions_)}

Adds OIDC server services to the specified [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') with provided configuration options\.
This method allows for configuring OIDC options to tailor the authentication server to your specific needs\.

```csharp
public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddOidcServices(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Abblix.Oidc.Server.Common.Configuration.OidcOptions> configureOptions);
```
#### Parameters

###### `services` [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcServices(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,System.Action_Abblix.Oidc.Server.Common.Configuration.OidcOptions_).services}

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

###### `configureOptions` [System\.Action&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.action-1 'System\.Action\`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/system.action-1 'System\.Action\`1') {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AddOidcServices(thisMicrosoft.Extensions.DependencyInjection.IServiceCollection,System.Action_Abblix.Oidc.Server.Common.Configuration.OidcOptions_).configureOptions}

A delegate to configure the [OidcOptions](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Configuration.OidcOptions 'Abblix\.Oidc\.Server\.Common\.Configuration\.OidcOptions')\.

#### Returns
[Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection')  
The [Microsoft\.Extensions\.DependencyInjection\.IServiceCollection](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection 'Microsoft\.Extensions\.DependencyInjection\.IServiceCollection') so additional calls can be chained\.

### Remarks
The request pipeline must call `app.UseCors()` after `app.UseRouting()`\. The protocol
controllers carry CORS metadata, because browser\-based clients read the discovery document, the
key set and the token endpoint cross\-origin \- and ASP\.NET Core routing refuses to serve any
endpoint whose CORS metadata no middleware honours, so without that call every protocol endpoint
answers 500\. The policy itself is registered here; only the middleware call belongs to the host,
since the framework accepts the middleware only when it runs after routing has selected an
endpoint \- a place no library can insert it from\.

## ServiceCollectionExtensions\.AppPolicy\(this CorsOptions, string, CorsSettings\) Method {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AppPolicy(thisMicrosoft.AspNetCore.Cors.Infrastructure.CorsOptions,string,Abblix.Oidc.Server.Mvc.Configuration.CorsSettings)}

Configures the application's CORS policy according to the specified [CorsSettings](https://www.abblix.com/en/docs/api/abblix-oidc-server-mvc/Abblix.Oidc.Server.Mvc.Configuration.CorsSettings 'Abblix\.Oidc\.Server\.Mvc\.Configuration\.CorsSettings')\.
This method enables the customization of CORS policies for OIDC endpoints, allowing for the specification
of allowed origins, methods, and headers, as well as whether credentials are supported\.

```csharp
public static void AppPolicy(this Microsoft.AspNetCore.Cors.Infrastructure.CorsOptions options, string policyName, Abblix.Oidc.Server.Mvc.Configuration.CorsSettings settings);
```
#### Parameters

###### `options` [Microsoft\.AspNetCore\.Cors\.Infrastructure\.CorsOptions](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.cors.infrastructure.corsoptions 'Microsoft\.AspNetCore\.Cors\.Infrastructure\.CorsOptions') {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AppPolicy(thisMicrosoft.AspNetCore.Cors.Infrastructure.CorsOptions,string,Abblix.Oidc.Server.Mvc.Configuration.CorsSettings).options}

The [Microsoft\.AspNetCore\.Cors\.Infrastructure\.CorsOptions](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.cors.infrastructure.corsoptions 'Microsoft\.AspNetCore\.Cors\.Infrastructure\.CorsOptions') to configure\.

###### `policyName` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AppPolicy(thisMicrosoft.AspNetCore.Cors.Infrastructure.CorsOptions,string,Abblix.Oidc.Server.Mvc.Configuration.CorsSettings).policyName}

The name of the CORS policy, used to identify it\.

###### `settings` [CorsSettings](https://www.abblix.com/en/docs/api/abblix-oidc-server-mvc/Abblix.Oidc.Server.Mvc.Configuration.CorsSettings 'Abblix\.Oidc\.Server\.Mvc\.Configuration\.CorsSettings') {#Abblix.Oidc.Server.Mvc.ServiceCollectionExtensions.AppPolicy(thisMicrosoft.AspNetCore.Cors.Infrastructure.CorsOptions,string,Abblix.Oidc.Server.Mvc.Configuration.CorsSettings).settings}

The [CorsSettings](https://www.abblix.com/en/docs/api/abblix-oidc-server-mvc/Abblix.Oidc.Server.Mvc.Configuration.CorsSettings 'Abblix\.Oidc\.Server\.Mvc\.Configuration\.CorsSettings') that define the CORS policy\.
