IConfigureOptions <t>与AuthenticationBuilder

时间:2019-03-13 15:51:18

标签: c# asp.net-core asp.net-core-mvc asp.net-core-2.2

我过去使用过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绑定:

services.AddSingleton<IConfigureOptions<OAuth2IntrospectionOptions>, ConfigureOAuth2IntrospectionOptions>();

但是,在我的配置类中从来没有调用configure方法。

AddOauth2Introspection方法有一个带有Action参数的方法,我认为这种方法会自动使用:

public static AuthenticationBuilder AddOAuth2Introspection(this AuthenticationBuilder builder, string authenticationScheme, Action<OAuth2IntrospectionOptions> configureOptions)

默认情况下可以使用吗?我想使用此模式,以便可以将构造函数注入用于我的配置对象,而不是直接在Startup.cs中引用配置。

我可能还需要进行加密/解密,这将需要一个我不想在ConfigureServices方法中使用的注入类。

编辑: Microsoft Docs中的Swashbuckle实现示例:

初始票: 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 :(得分:0)

请尝试使用IConfigureNamedOptions,因为已命名身份验证方案。您必须实现一个带有名称的额外的Configure方法。您仍然可以将类绑定为IConfigureOptions