如何使用 Identity 在 ASP.NET Core 項目中禁用 HTTPS?
我最近在 Visual Studio 2019 中創建了一個 ASP.NET Core 3.0 Web 應用程序項目(啟用了 Docker,但我認為這不相關),並且在包含 ASP.NET Identity 時似乎無法禁用 HTTPS個人使用者帳戶。每當我在調試器中啟動應用程序時,頁面都會使用 HTTPS 打開並導航到 HTTP 會再次將我重定向回來。
我嘗試創建一個新項目來測試發生了什麼,並發現了以下內容:
創建項目時,我啟用了 ASP.NET Identity 以便在我的應用程序中使用本地帳戶,我注意到如果我再次通過嚮導以創建具有相同設置的項目(啟用了 Identity 的 Web 應用程序對於單個使用者帳戶)取消選中啟用 HTTPS 的框的選項似乎是灰色的。
創建項目後,我嘗試
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:
在該
Delete domain security policies部分中,輸入localhost域並點擊Delete按鈕更新 2 - 警告 雖然這個“修復”允許我使用 HTTP 執行我的項目,但我確實發現除非啟用 HTTPS,否則 Identity 不允許我登錄 - 我認為這與 SignInManager 設置僅 HTTPS 身份驗證有關cookie - 有關詳細資訊,請參見此處:AspNet Core Identity - cookie 未在生產中設置
