You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core 6 Identity+React SPA应用中禁用SSL要求

在ASP.NET Core 6 React模板(带Identity认证)中禁用HTTPS的完整解决方案

问题背景

在基于ASP.NET Core 6 + React + Identity认证的模板项目中,因外部支付系统限制,需在本地测试时完全禁用HTTPS。按常规配置修改后,站点可启动但登录环节出现异常:OIDC客户端仍请求HTTPS链接,手动修正配置后调用connect/authorize时提示“Request validation failed”。

已尝试的无效配置

  • 前端.env-development设置HTTPS=false
  • 后端移除app.UseHttpsRedirection();
  • 更新launchSettings.json移除HTTPS地址
  • 修改.csproj的SpaProxyServerUrl为HTTP地址

完整解决方案

一、后端核心配置修正

  1. 强制IdentityServer使用HTTP元数据地址
    默认情况下IdentityServer会自动检测请求Scheme生成元数据地址,需显式指定HTTP地址并关闭HTTPS要求:

    builder.Services.AddIdentityServer(options =>
    {
        // 强制指定Issuer为HTTP地址,覆盖自动检测的HTTPS
        options.IssuerUri = "http://localhost:5271";
        // 开发环境下关闭HTTPS强制要求
        options.RequireSsl = false;
    })
    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
    

    确保app.UseHttpsRedirection();已被注释或删除。

  2. 完全移除launchSettings.json中的HTTPS配置
    将profiles中的applicationUrl改为仅HTTP地址,同时禁用IIS Express的SSL端口:

    {
      "iisSettings": {
        "windowsAuthentication": false,
        "anonymousAuthentication": true,
        "iisExpress": {
          "applicationUrl": "http://localhost:59447",
          "sslPort": 0 // 设为0禁用SSL
        }
      },
      "profiles": {
        "MyApp": {
          "commandName": "Project",
          "launchBrowser": true,
          "applicationUrl": "http://localhost:5271", // 仅保留HTTP地址
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development",
            "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
          }
        },
        "IIS Express": {
          "commandName": "IISExpress",
          "launchBrowser": true,
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development",
            "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
          }
        }
      }
    }
    
  3. 确认.csproj配置
    保持SpaProxyServerUrl为HTTP地址:

    <PropertyGroup>
      <TargetFramework>net6.0</TargetFramework>
      <SpaRoot>ClientApp\</SpaRoot>
      <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
      <SpaProxyServerUrl>http://localhost:44489</SpaProxyServerUrl>
      <SpaProxyLaunchCommand>npm start</SpaProxyLaunchCommand>
    </PropertyGroup>
    

二、前端配置修正

修正setupProxy.js的目标地址逻辑
默认逻辑优先选择HTTPS地址,需强制筛选HTTP地址:

const { createProxyMiddleware } = require('http-proxy-middleware');
const { env } = require('process');

// 强制选择HTTP协议的后端地址
const target = env.ASPNETCORE_URLS ? env.ASPNETCORE_URLS.split(';').find(u => u.startsWith('http://')) : 'http://localhost:59447';

const context = [
  "/api",
  "/_configuration",
  "/.well-known",
  "/Identity",
  "/connect",
  "/ApplyDatabaseMigrations",
  "/_framework",
];

module.exports = function(app) {
  const appProxy = createProxyMiddleware(context, {
    target: target,
    secure: false,
    headers: {
      Connection: 'Keep-Alive'
    }
  });

  app.use(appProxy);
};

保持.env-development现有配置不变:

PORT=44489
HTTPS=false

三、解决“Request validation failed”错误

该错误源于IdentityServer检测到请求Scheme与Issuer配置不匹配,完成上述配置后:

  • 清除浏览器缓存及OIDC相关本地存储数据
  • 重启整个解决方案(后端+前端),确保所有配置生效

验证步骤

  1. 启动后端,访问http://localhost:5271/.well-known/openid-configuration,确认所有端点均为HTTP协议
  2. 启动前端,查看浏览器控制台,确认登录请求调用http://localhost:5271/connect/authorize
  3. 执行登录流程,验证功能正常

内容的提问来源于stack exchange,提问作者Michael Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:30:46