Authentication 在.NET核心API集成测试中使用正确的身份验证方案

Authentication 在.NET核心API集成测试中使用正确的身份验证方案,authentication,testing,.net-core,integration-testing,okta,Authentication,Testing,.net Core,Integration Testing,Okta,我们正在尝试支持多种身份验证方案。这在非测试代码中有效,但在我们的集成测试中无效 在我们的集成测试中,我们无法为给定的测试使用正确的身份验证方案。一些测试测试我们的NTLM身份验证,而另一些测试我们的承载身份验证。我们可以进行NTLM身份验证或承载身份验证,但我们的代码无法从测试请求中正确选择要使用的身份验证方案 x.AddAuthentication("Test") .AddScheme<AuthenticationSchemeOptions, TestAuthenticatio

我们正在尝试支持多种身份验证方案。这在非测试代码中有效,但在我们的集成测试中无效

在我们的集成测试中,我们无法为给定的测试使用正确的身份验证方案。一些测试测试我们的NTLM身份验证,而另一些测试我们的承载身份验证。我们可以进行NTLM身份验证或承载身份验证,但我们的代码无法从测试请求中正确选择要使用的身份验证方案

x.AddAuthentication("Test")
    .AddScheme<AuthenticationSchemeOptions, TestAuthenticationHandler>("Test", null);
在我们的应用程序启动代码中,我们为Okta配置了JWT承载身份验证:

services.AddAuthentication("Bearer")
    .AddJwtBearer("Bearer", opt =>
    {
        opt.Audience = Configuration.GetValue<string>("Okta:Audience");
        opt.Authority = issuer;
        opt.TokenValidationParameters = validationParameters;
        opt.BackchannelHttpHandler = new UserAgentHandler("okta-aspnetcore",
            typeof(OktaAuthenticationOptionsExtensions).Assembly.GetName().Version);
        opt.SecurityTokenValidators.Clear();
        opt.SecurityTokenValidators.Add(new StrictSecurityTokenValidator());
    });
出于某种原因,我们的测试身份验证始终使用integration WebApplicationFactory中定义的默认身份验证方案,而从不使用我们认为应该基于请求的身份验证方案

x.AddAuthentication("Test")
    .AddScheme<AuthenticationSchemeOptions, TestAuthenticationHandler>("Test", null);
x.AddAuthentication(“测试”)
.AddScheme(“测试”,空);

有人知道我们做错了什么吗?

在AddAuthentication(“Test”)上方添加下面的代码,然后它将工作并识别测试方案

                services.AddAuthentication(options =>
                {
                    options.DefaultAuthenticateScheme = "Test";
                    options.DefaultChallengeScheme = "Test";
                });

你修过这个吗?我无法让它使用我的测试方案——除了在我启动时添加Jwt auth(services.AddAuthentication…)@RichS时注释掉代码之外,很抱歉回复得太晚了!我们已经(某种程度上)解决了这个问题。最终制作了两种不同类型的WebApplicationFactory,它们将创建一个使用Okta或NTLM auth的客户端<代码>变量工厂=使用BearToken?(WebApplicationFactory)新的OktaAuthWebApplicationFactory(AuthorizedOktaGroups):新的WindowsAuthWebApplicationFactory(AuthorizedUser)
                services.AddAuthentication(options =>
                {
                    options.DefaultAuthenticateScheme = "Test";
                    options.DefaultChallengeScheme = "Test";
                });