Я использовал тот же метод в .NET Core 2.2. То, что я наконец нашел, что работало для .NET Core 3.0, основано на Интеграционных тестах - Mock Authentication Я добавил обработчик проверки подлинности Mock Test следующим образом:
public class TestAuthHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
public TestAuthHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock)
: base(options, logger, encoder, clock)
{
}
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
var claims = new[] { new Claim(ClaimTypes.Name, "Test user") };
var identity = new ClaimsIdentity(claims, "Test");
var principal = new ClaimsPrincipal(identity);
var ticket = new AuthenticationTicket(principal, "Test");
AuthenticateResult result = AuthenticateResult.Success(ticket);
return Task.FromResult(result);
}
}
Затем в ConfigureTestServices
я изменил логику с
services.AddControllers(options =>
{
options.Filters.Add(new AllowAnonymousFilter());
});
, чтобы добавить аутентификацию и переопределить политику авторизации как таковую:
services
.AddAuthentication("Test")
.AddScheme<AuthenticationSchemeOptions, TestAuthHandler>("Test", options => { });
services.AddAuthorization(options =>
{
options.AddPolicy("<Existing Policy Name>", builder =>
{
builder.AuthenticationSchemes.Add("Test");
builder.RequireAuthenticatedUser();
});
options.DefaultPolicy = options.GetPolicy("<Existing Policy Name>");
});
Теперь это позволило моим тестам работать в .NET Core 3.0.