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

已配置CORS仍遇401未授权?ASP.NET Core+React IIS部署求助

解决Windows身份验证ASP.NET Core API部署IIS后React调用401问题

以下是针对问题的具体排查和解决步骤:

1. 确认IIS站点身份验证配置

  • 打开IIS管理器,定位到API所在站点,进入身份验证:
    • 启用Windows身份验证,禁用匿名身份验证
    • 双击Windows身份验证,点击高级设置,取消勾选「启用内核模式」(内核模式可能干扰NTLM凭证跨域传递)
    • 在Windows身份验证的提供程序中,确保NTLM和Negotiate都已启用(优先NTLM也可)

2. 修正ASP.NET Core的CORS配置

由于你启用了withCredentials:true,CORS策略不能使用AllowAnyOrigin,必须指定具体的React客户端地址,否则浏览器会拒绝传递凭证。在Program.cs中修改配置:

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowReactClient", policy =>
    {
        // 替换为你部署后的React客户端实际地址,比如http://react.example.com
        policy.WithOrigins("http://your-react-client-domain")
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials();
    });
});

// 注意中间件顺序:UseCors要放在UseRouting之后,UseAuthorization之前
app.UseRouting();
app.UseCors("AllowReactClient");
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

3. 调整React请求的目标地址

部署后不能再使用http://localhost:8000,替换为API在IIS上的实际访问地址,比如:

fetch("http://your-api-domain/User/GetIdentity", { withCredentials: true })

4. 检查web.config配置

确保API的web.config中正确配置Windows身份验证,避免内核模式冲突:

<system.webServer>
  <security>
    <authentication>
      <windowsAuthentication enabled="true">
        <providers>
          <add value="NTLM" />
        </providers>
      </windowsAuthentication>
      <anonymousAuthentication enabled="false" />
    </authentication>
  </security>
  <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
  </handlers>
  <aspNetCore processPath="dotnet" arguments=".\YourApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
  <validation validateIntegratedModeConfiguration="false" />
</system.webServer>

5. 禁用IIS的CORS模块(若已安装)

如果你的IIS服务器安装了官方CORS模块,建议暂时禁用它,只用ASP.NET Core的CORS配置,避免两者规则冲突导致凭证无法传递。

6. 验证ASP.NET Core身份验证管道

确保Program.cs中正确启用了Windows身份验证和授权:

builder.Services.AddAuthentication(IISDefaults.AuthenticationScheme);
builder.Services.AddAuthorization();

// 管道中顺序不能错
app.UseAuthentication();
app.UseAuthorization();

完成以上配置后,重启IIS站点和React客户端,重新测试请求即可。

内容的提问来源于stack exchange,提问作者Soudabeh Parsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:50:29