Я использовал IConfigureOptions в прошлом, и у меня есть новый проект, над которым я работаю, используя интроспекцию OAuth.
Я попытался настроить шаблон параметров с помощью класса:
public class
ConfigureOAuth2IntrospectionOptions : IConfigureOptions<
OAuth2IntrospectionOptions>
{
private readonly Settings settings;
public ConfigureOAuth2IntrospectionOptions(IOptions<Settings> options)
{
settings = options.Value;
}
public void Configure(OAuth2IntrospectionOptions options)
{
options.IntrospectionEndpoint =
$"{settings.IdentityServer.Authority}/connect/introspect";
options.ClientId = ScopeNameConstants.MyClientId;
options.ClientSecret = settings.IdentityServer.ClientSecret;
}
}
И в моем startup.cs у меня есть этот код:
services.AddAuthentication(
options =>
{
options.DefaultAuthenticateScheme =
OAuth2IntrospectionDefaults.AuthenticationScheme;
options.DefaultChallengeScheme =
OAuth2IntrospectionDefaults.AuthenticationScheme;
})
.AddOAuth2Introspection();
Я добавляю к DI Bindings:
services.AddSingleton<IConfigureOptions<OAuth2IntrospectionOptions>, ConfigureOAuth2IntrospectionOptions>();
Однако метод configure никогда не вызывается в моем классе конфигурации.
В методе AddOauth2Introspection есть метод с параметром Action, который, как я думал, будет использоваться автоматически:
public static AuthenticationBuilder AddOAuth2Introspection(this AuthenticationBuilder builder, string authenticationScheme, Action<OAuth2IntrospectionOptions> configureOptions)
Возможно ли использовать по умолчанию? Я хочу использовать этот шаблон, чтобы использовать инжектор конструктора для своего объекта конфигурации, а не ссылаться на конфигурацию непосредственно в Startup.cs
.
Мне также может потребоваться выполнить шифрование / дешифрование, для которого потребуется внедренный класс, который я не хочу делать доступным в методе ConfigureServices.
Edit:
Пример реализации Swashbuckle из документации Microsoft:
Начальный билет:
https://github.com/Microsoft/aspnet-api-versioning/issues/422
Новый пример:
https://github.com/Microsoft/aspnet-api-versioning/blob/master/samples/aspnetcore/SwaggerSample/ConfigureSwaggerOptions.cs