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

cod*_*ips 7 asp.net-mvc ssl https asp.net-identity asp.net-core

我最近在 Visual Studio 2019 中创建了一个 ASP.NET Core 3.0 Web 应用程序项目(启用了 Docker,但我认为这不相关),并且在包含 ASP.NET Identity 时似乎无法禁用 HTTPS个人用户帐户。每当我在调试器中启动应用程序时,页面都会使用 HTTPS 打开并导航到 HTTP 将我再次重定向回来。

我尝试创建一个新项目来测试正在发生的事情,并发现以下内容:

创建项目时,我启用了 ASP.NET Identity 以便在我的应用程序中使用本地帐户,并且我注意到如果我再次通过向导以创建具有相同设置的项目(启用了 Identity 的 Web 应用程序)对于个人用户帐户)取消选中启用 HTTPS 框的选项似乎是灰色的。

无法在使用 Identity 创建项目时禁用 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();
            });
        }
Run Code Online (Sandbox Code Playgroud)

并已编辑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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道我接下来可以尝试什么?我希望该应用程序位于 SSL 终止反向代理之后,所以我认为禁用它并不是不合理的。

cod*_*ips 8

所以我实际上设法解决了这个问题。我在 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 未在生产中设置