Проверка подлинности Windows веб-приложения dotnet core 2.1 не выполняется в VS Code, но не в VS 2017 или на развернутом сервере - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть веб-приложение 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, но безрезультатно.

...