Authentication 在.NET核心API集成测试中使用正确的身份验证方案
我们正在尝试支持多种身份验证方案。这在非测试代码中有效,但在我们的集成测试中无效 在我们的集成测试中,我们无法为给定的测试使用正确的身份验证方案。一些测试测试我们的NTLM身份验证,而另一些测试我们的承载身份验证。我们可以进行NTLM身份验证或承载身份验证,但我们的代码无法从测试请求中正确选择要使用的身份验证方案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
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";
});