簡體   English   中英

如何在啟用Windows身份驗證的情況下以編程方式啟動和停止ASP.NET Core 2.1應用程序?

[英]How to start and stop an ASP.NET Core 2.1 app programmatically with Windows Authentication enabled?

我對ASP.NET Core 2.1應用程序有一組非常具體的需求,我似乎無法解決這個問題。 該應用程序的目的是演示如何使用自動化工具(如Selenium)使用Web代理,特別是針對使用NTLM身份驗證的站點。

因為這是一個在其他正在運行的代碼的上下文中使用的演示站點,所以我需要能夠以編程方式啟動和停止它。 我似乎無法找到任何方法來有效地使用Kestral和IIS / IIS Express來適當地啟動和停止應用程序。

因為我想證明使用配置了代理的Web瀏覽器來瀏覽並通過此站點進行身份驗證,並且因為大多數瀏覽器在瀏覽localhost站點(及其堂兄弟127.0.0.1::1 )時繞過代理,我需要能夠使用localhost以外的主機名來瀏覽站點,並且我在hosts文件中使用了一個簡單的別名來實現此目的。 但是,這會讓HTTP.sys正確,因為嘗試注冊除localhost結果之外的任何URL前綴,完全不出所料地知道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似乎不理解沒有HTTP.sys的Windows身份驗證。 如果我嘗試使用任何編程方式來啟動應用程序( WebHost.CreateDefaultBuilder().Build().StartAsync ),它無法提示進行身份驗證,我猜測它的原因與它不起作用相同調試器中的“項目”配置文件。

關鍵是要在克隆演示存儲庫后避免用戶進行最少的配置。 在完整的IIS中托管Web應用程序是一個非首發。 同樣,需要管理員訪問權限的解決方案(如使用netsh http add urlacl )或以管理員netsh http add urlacl運行也是非啟動者,因為許多用戶沒有對其計算機的管理訪問權限。

我正在嘗試甚至可能嗎? 我怎樣才能將它拼湊起來以使其有效? “你想做的事情是不可能的”,這是一個非常有效的答案,但如果這是給出的答案,我想了解為什么這是不可能的更多信息。

我沒有太多的IIS經驗,也沒有完全理解你的情況,但我希望我可以分享足夠的幫助你解決這個問題。

您的問題似乎有三個方面:

  1. 不使用localhost作為主機名。
  2. Windows身份驗證
  3. 以編程方式啟動和停止應用程序。

我無法幫助1.關於Windows身份驗證:

  1. ASP.NET Core支持兩種帶有IIS的托管模型: InProcessOutOfProcess
  2. 當您選擇“IIS Express”時,IIS會為您運行ASP.NET核心應用程序( InProcess ) - 因此圖中沒有紅隼。 當您選擇項目配置文件時,您實際上是使用Kestrel( OutOfProcess )自托管應用程序 - 因此除非您明確將其配置為充當反向代理,否則圖片中沒有IIS。
  3. 只要您使用InProcessOutOfProcess獲得圖片中的IIS,您就應該能夠使用Windows身份驗證。
  4. Kestrel對Windows身份驗證的支持取決於HTTP.sys。
  5. 推薦閱讀: 在ASP.NET Core中配置Windows身份驗證 使用IIS在Windows上托管ASP.NET Core

關於啟動和停止應用程序:

  1. 使用OutOfProcess ,您可以完全控制,您可以隨意啟動和停止,因為您可以訪問WebHost對象。
  2. 使用InProcess ,我不確定使用WebHost啟動/停止是否可行,但您可以使用IApplicationLifetime.StopApplication()停止它,並讓IIS在下一個請求時為您啟動它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM