IConfigureOptions <T>с AuthenticationBuilder - PullRequest
0 голосов
/ 13 марта 2019

Я использовал 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

1 Ответ

0 голосов
/ 20 июля 2019

Попробуйте IConfigureNamedOptions, потому что схемы аутентификации названы. Вы должны реализовать дополнительный метод Configure, который принимает имя. Вы все еще можете связывать свой класс как IConfigureOptions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...