Как программно запустить и остановить приложение ASP.NET Core 2.1 с включенной аутентификацией Windows? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть очень специфический набор потребностей для приложения ASP.NET Core 2.1, который я не могу решить.Цель приложения - продемонстрировать использование веб-прокси с такими инструментами автоматизации, как Selenium, в частности, для сайта, использующего проверку подлинности NTLM.

Поскольку это демонстрационный сайт, который будет использоваться в контексте другого выполняющегося кодаМне нужно иметь возможность запускать и останавливать это программно.Кажется, я не могу найти способ эффективно использовать Kestral и IIS / IIS Express для надлежащего запуска и остановки приложения.

Поскольку я хочу продемонстрировать использование веб-браузеров, настроенных с прокси-сервером, для просмотра и проверки подлинностипо этому сайту, и поскольку большинство браузеров обходят прокси при просмотре localhost сайтов (и его двоюродных братьев 127.0.0.1 и ::1), мне нужно иметь возможность использовать имя хоста, отличное от localhost, для просмотра сайта, и яДля этой цели я использую простой псевдоним в моем файле hosts.Тем не менее, это позволяет HTTP.sys сразу же пытаться зарегистрировать любой префикс URL, отличный от результатов localhost, совершенно не удивительно, зная, как работает HTTP.sys, с ошибкой Access denied.

Я исследовал несколько другие ответы , все из которых кажутся устаревшими или просто не работают для меня.

Класс запуска выглядит следующим образом:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<IISOptions>(iis => { iis.AutomaticAuthentication = false; });
        services.AddAuthentication(IISDefaults.AuthenticationScheme);
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
    }
}

Если я вручную запускаю приложение в отладчике с использованием профиля «IIS Express», оно работает так, что мне предлагают ввести учетные данные.Конечно, если я использую профиль «проект», он не будет работать, потому что Kestrel не понимает аутентификацию Windows без HTTP.sys.Если я пытаюсь использовать какие-либо программные средства для запуска приложения (например, WebHost.CreateDefaultBuilder().Build().StartAsync), оно не запрашивает аутентификацию, я думаю, по тем же причинам, по которым оно не работает в профиле "project" в отладчике..

Смысл в том, чтобы избежать к минимуму конфигурации для пользователей после клонирования демонстрационного репо.Хостинг веб-приложения в полном IIS не является началом.Аналогично, решения, которые требуют административного доступа (например, с использованием netsh http add urlacl) или запуска в качестве администратора, также не являются начальными, поскольку многие пользователи не имеют административного доступа к своим компьютерам.

Это то, что я пытаюсь даже возможно?Как я могу сделать это вместе, чтобы это сработало?«То, что вы пытаетесь сделать, невозможно», - это совершенно правильный ответ, но если этот ответ дан, я бы хотел получить дополнительную информацию о том, почему это невозможно.

1 Ответ

0 голосов
/ 29 мая 2019

У меня нет большого опыта работы с IIS, и я не совсем понимаю вашу ситуацию, но я надеюсь, что смогу поделиться достаточно, чтобы помочь вам понять это.

Кажется, у вашего вопроса есть три аспекта:

  1. Не использовать localhost в качестве имени хоста.
  2. Аутентификация Windows
  3. Запуск и остановка приложения программно.

Не могу помочь с 1. Относительно аутентификации Windows:

  1. ASP.NET Core поддерживает две модели хостинга с IIS: InProcess и OutOfProcess.
  2. Когда вы выбираете «IIS Express», IIS запускает базовое приложение ASP.NET для вас (InProcess) - поэтому на рисунке нет пустельги. Когда вы выбираете профиль проекта, вы, по сути, самостоятельно размещаете приложение с помощью Kestrel (OutOfProcess) - поэтому на рисунке нет IIS, если вы явно не настроите его для работы в качестве обратного прокси-сервера.
  3. Пока у вас есть IIS на картинке с InProcess или OutOfProcess, вы должны иметь возможность работать с аутентификацией Windows.
  4. Поддержка Kestrel для проверки подлинности Windows зависит от HTTP.sys.
  5. Рекомендуемое чтение: Настройка проверки подлинности Windows в ASP.NET Core | Host ASP.NET Core в Windows с IIS

Относительно запуска и остановки приложения:

  1. С OutOfProcess у вас есть полный контроль, вы можете запускать и останавливать по желанию, поскольку у вас есть доступ к WebHost объекту.
  2. С InProcess я не уверен, что запуск / остановка с WebHost сработает, но вы можете остановить его с помощью IApplicationLifetime.StopApplication() и позволить IIS запустить его обратно для вас при следующем запросе.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...