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

Windows Authentication返回401未授权的问题排查求助

问题根源分析及解决方案

核心原因:跨域请求未正确携带Windows凭证,且后端CORS配置不匹配

Swagger能正常工作是因为它和API处于同域环境,浏览器会自动发送当前用户的Windows凭证;而React前端属于跨域请求,默认不会携带凭证,同时后端CORS配置可能未允许凭证传递,导致服务器返回401并要求Negotiate认证,但浏览器无法触发凭证发送。

具体问题点及修复方式:

  • Axios未配置携带凭证
    axios默认不会在跨域请求中携带用户凭证,需要显式开启withCredentials:

    // React中axios请求示例
    axios.get('/api/user', { withCredentials: true })
      .then(res => console.log(res.data))
      .catch(err => console.error(err));
    
  • 后端CORS配置不符合Windows认证要求
    Windows认证需要CORS允许携带凭证,且AllowedOrigins不能使用通配符*,必须指定前端的具体域名。修改ASP.NET Web API的Program.cs:

    builder.Services.AddCors(options =>
    {
        options.AddPolicy("ReactCorsPolicy", policy =>
        {
            policy.WithOrigins("http://localhost:3000") // 替换为你的React实际域名
                  .AllowAnyHeader()
                  .AllowAnyMethod()
                  .AllowCredentials(); // 必须开启此选项,允许凭证传递
        });
    });
    
    // 注意:UseCors必须在UseAuthentication和UseAuthorization之前调用
    app.UseCors("ReactCorsPolicy");
    
  • 浏览器对跨域Windows凭证的限制
    现代浏览器仅对同域或标记为本地Intranet的站点自动发送Windows凭证。如果前端域名不在浏览器的Intranet区域:

    • 打开浏览器设置,将前端域名添加到本地Intranet站点列表;
    • 启用浏览器的"自动登录到Intranet站点"选项(不同浏览器路径略有差异)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:01:19