У меня есть веб-приложение dotnet core 2.1, которое содержит приложение реагирования.При развертывании приложения на сервере Windows с помощью IIS Windows аутентификация Windows работает должным образом.При отладке приложения из Visual Studio 2017 с использованием IIS проверка подлинности работает правильно.Однако при запуске приложения из VS Code аутентификация завершается неудачно.Это оказалось исключительно трудным, и хотя на GitHub и на странице документации Microsoft есть документация, реализация этого не решила проблему.Глядя на файл журнала, я вижу, что существует исключение операции System.Invalid и что не найдена схема по умолчанию или схема вызова.
Ошибка: System.InvalidOperationException: не указан authenticationScheme и не найдено DefaultChallengeScheme,в Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync (контекст HttpContext, строковая схема, свойства AuthenticationProperties) в Microsoft.AspNetCore.Mvc.ChallengeResult.ExecuteResultAsync (контекст ActionContext))по адресу Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAlwaysRunResultFilters () по адресу Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync () по адресу Microsoft.AspNetCore.Mvc.Internal.ResdleInInAwareIninCairInIn.Iner..Invoke (HttpContext httpContext) в Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.Invoke (контекст HttpContext)
LaunchSettings.json:
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5000/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"applicationName": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5000/"
}
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.IsDevelopment())
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.Configure<IISOptions>(options => {
options.AutomaticAuthentication = true;
options.ForwardClientCertificate = true;
});
}
else
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
}
services.AddMvc();
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ReactApp/build";
});
}
Program.cs
public class Program
{
public static void Main(string[] args)
{
var logFactory = NLogBuilder.ConfigureNLog("nlog.config");
logFactory.KeepVariablesOnReload = true;
var logger = logFactory.GetCurrentClassLogger();
try
{
CreateWebHostBuilder(args).UseNLog().Build().Run();
}
catch (Exception ex)
{
logger.Error(ex, "Stopped program because of exception");
}
finally
{
NLog.LogManager.Shutdown();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
Я также попытался использовать директивы препроцессора, на которые также ответил Visual Studio 2017.Однако это известная проблема с кодом Visual Studio.Затем я попытался использовать метод расширения, чтобы определить, поступил ли запрос с локального хоста, а затем установить группу по умолчанию в зависимости от среды.Это тоже не сработало.Затем я попытался разграничить среду разработки как локальную и использовать HttpSys с NTLM на основе этого вопроса переполнения стека , но это также не сработало.Вышеупомянутый код был отменен из вышеупомянутых попыток и исходного кода.Наконец, я попытался использовать расширения IIS Express и расширения IISExpress в коде Visual Studio, но безрезультатно.