/* * Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) * See https://github.com/openiddict/openiddict-core for more information concerning * the license and the contributors participating to this project. */ using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; using OpenIddict.Server; using OpenIddict.Server.Owin; namespace Microsoft.Extensions.DependencyInjection; /// /// Exposes extensions allowing to register the OpenIddict server services. /// public static class OpenIddictServerOwinExtensions { /// /// Registers the OpenIddict server services for OWIN in the DI container. /// /// The services builder used by OpenIddict to register new services. /// This extension can be safely called multiple times. /// The instance. public static OpenIddictServerOwinBuilder UseOwin(this OpenIddictServerBuilder builder) { ArgumentNullException.ThrowIfNull(builder); builder.Services.AddWebEncoders(); // Note: unlike regular OWIN middleware, the OpenIddict server middleware is registered // as a scoped service in the DI container. This allows containers that support middleware // resolution (like Autofac) to use it without requiring additional configuration. builder.Services.TryAddScoped(); // Register the built-in event handlers used by the OpenIddict OWIN server components. // Note: the order used here is not important, as the actual order is set in the options. builder.Services.TryAdd(OpenIddictServerOwinHandlers.DefaultHandlers.Select(descriptor => descriptor.ServiceDescriptor)); // Register the built-in filters used by the default OpenIddict OWIN server event handlers. builder.Services.TryAddSingleton(); builder.Services.TryAddSingleton(); builder.Services.TryAddSingleton(); builder.Services.TryAddSingleton(); builder.Services.TryAddSingleton(); builder.Services.TryAddSingleton(); builder.Services.TryAddSingleton(); builder.Services.TryAddSingleton(); // Register the option initializers used by the OpenIddict OWIN server integration services. // Note: TryAddEnumerable() is used here to ensure the initializers are only registered once. builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton< IConfigureOptions, OpenIddictServerOwinConfiguration>()); builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton< IPostConfigureOptions, OpenIddictServerOwinConfiguration>()); builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton< IPostConfigureOptions, OpenIddictServerOwinConfiguration>()); return new OpenIddictServerOwinBuilder(builder.Services); } /// /// Registers the OpenIddict server services for OWIN in the DI container. /// /// The services builder used by OpenIddict to register new services. /// The configuration delegate used to configure the server services. /// This extension can be safely called multiple times. /// The instance. public static OpenIddictServerBuilder UseOwin( this OpenIddictServerBuilder builder, Action configuration) { ArgumentNullException.ThrowIfNull(builder); ArgumentNullException.ThrowIfNull(configuration); configuration(builder.UseOwin()); return builder; } }