Asp.net-Mvc

如何使用 Identity 在 ASP.NET Core 項目中禁用 HTTPS?

  • March 26, 2020

我最近在 Visual Studio 2019 中創建了一個 ASP.NET Core 3.0 Web 應用程序項目(啟用了 Docker,但我認為這不相關),並且在包含 ASP.NET Identity 時似乎無法禁用 HTTPS個人使用者帳戶。每當我在調試器中啟動應用程序時,頁面都會使用 HTTPS 打開並導航到 HTTP 會再次將我重定向回來。

我嘗試創建一個新項目來測試發生了什麼,並發現了以下內容:

創建項目時,我啟用了 ASP.NET Identity 以便在我的應用程序中使用本地帳戶,我注意到如果我再次通過嚮導以創建具有相同設置的項目(啟用了 Identity 的 Web 應用程序對於單個使用者帳戶)取消選中啟用 HTTPS 的框的選項似乎是灰色的。

無法在使用身份創建項目時禁用 HTTP

創建項目後,我嘗試Startup.cs通過註釋掉相關行來禁用 HTTPS 重定向中間件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
       {
           if (env.IsDevelopment())
           {
               app.UseDeveloperExceptionPage();
               app.UseDatabaseErrorPage();
           }
           else
           {
               app.UseExceptionHandler("/Home/Error");
               app.UseHsts();
           }
           //app.UseHttpsRedirection();
           app.UseStaticFiles();

           app.UseRouting();

           app.UseAuthentication();
           app.UseAuthorization();

           app.UseEndpoints(endpoints =>
           {
               endpoints.MapControllerRoute(
                   name: "default",
                   pattern: "{controller=Home}/{action=Index}/{id?}");
               endpoints.MapRazorPages();
           });
       }

並且已經編輯了launchSettings.json嘗試讓應用程序在調試時使用 HTTP 而不是 HTTPS 執行,但應用程序仍然嘗試使用 HTTPS 載入。

launchSettings.json前:

{
 "iisSettings": {
   "windowsAuthentication": false,
   "anonymousAuthentication": true,
   "iisExpress": {
     "applicationUrl": "http://localhost:51767",
     "sslPort": 44396
   }
 },
 "profiles": {
   "IIS Express": {
     "commandName": "IISExpress",
     "launchBrowser": true,
     "environmentVariables": {
       "ASPNETCORE_ENVIRONMENT": "Development"
     }
   },
   "HTTPSTest": {
     "commandName": "Project",
     "launchBrowser": true,
     "environmentVariables": {
       "ASPNETCORE_ENVIRONMENT": "Development"
     },
     "applicationUrl": "https://localhost:5001;http://localhost:5000"
   },
   "Docker": {
     "commandName": "Docker",
     "launchBrowser": true,
     "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
     "environmentVariables": {
       "ASPNETCORE_URLS": "https://+:443;http://+:80",
       "ASPNETCORE_HTTPS_PORT": "44397"
     },
     "httpPort": 51777,
     "useSSL": true,
     "sslPort": 44397
   }
 }
}

launchSettings.json後:

{
 "iisSettings": {
   "windowsAuthentication": false,
   "anonymousAuthentication": true,
   "iisExpress": {
     "applicationUrl": "http://localhost:51767"
   }
 },
 "profiles": {
   "IIS Express": {
     "commandName": "IISExpress",
     "launchBrowser": true,
     "environmentVariables": {
       "ASPNETCORE_ENVIRONMENT": "Development"
     }
   },
   "HTTPSTest": {
     "commandName": "Project",
     "launchBrowser": true,
     "environmentVariables": {
       "ASPNETCORE_ENVIRONMENT": "Development"
     },
     "applicationUrl": "http://localhost:5000"
   },
   "Docker": {
     "commandName": "Docker",
     "launchBrowser": true,
     "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
     "environmentVariables": {
     },
     "httpPort": 51777
   }
 }
}

有人對我接下來可以嘗試什麼有任何想法嗎?我希望該應用程序位於終止 SSL 的反向代理之後,因此我認為禁用它並不是不合理的。

所以我實際上設法解決了這個問題。我在 Visual Studio 使用 HTTPS 打開應用程序時看到的問題是 Visual Studio 的問題。

在另一台電腦上執行相同的設置可以很好地通過註釋掉app.UseHttpsRedirection()Startup.cs並刪除 SSL 引用在launchSettings.json我原來的文章中 - 執行調試器使用 HTTP 打開頁面並能夠連接到應用程序。

為了讓一切恢復正常,我嘗試完全刪除 Visual Studio,重新啟動,重新安裝並再次嘗試,但仍然遇到同樣的問題。最後,我還必須刪除AppData我的使用者目錄下的所有 Visual Studio 文件夾,然後重新安裝 Visual Studio,然後當我嘗試調試我的項目時它終於再次工作了!

更新:

這實際上是在周末之後回來的,我發現這次我的問題是 HSTS 已經記憶體了 Chrome 中對 HTTPS 的使用。可以在此處找到如何針對不同瀏覽器刪除此內容的範例:https ://appuals.com/how-to-clear-or-disable-hsts-for-chrome-firefox-and-internet-explorer/

總之,對於 Chrome:

  1. 導航到chrome://net-internals/#hsts

  2. 在該Delete domain security policies部分中,輸入localhost域並點擊Delete按鈕

更新 2 - 警告 雖然這個“修復”允許我使用 HTTP 執行我的項目,但我確實發現除非啟用 HTTPS,否則 Identity 不允許我登錄 - 我認為這與 SignInManager 設置僅 HTTPS 身份驗證有關cookie - 有關詳細資訊,請參見此處:AspNet Core Identity - cookie 未在生產中設置

引用自:https://stackoverflow.com/questions/58889840