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

Windows 11上IIS 10中ASP.NET Core 8 Web API的Windows身份验证失效

解决ASP.NET Core 8 Web API IIS集成身份验证数据库连接问题

1. 确认数据库连接字符串配置

确保连接字符串使用集成身份验证标识,无硬编码用户名密码:

Server=你的数据库服务器地址;Database=目标数据库名;Integrated Security=True;TrustServerCertificate=True;

若数据库为远程服务器,需额外配置Kerberos约束委派,允许IIS应用池身份委派访问数据库服务器。

2. 应用池身份权限配置

  • 使用域账户作为应用池标识:
    • 给该域账户在数据库服务器添加登录权限,并授予目标数据库的访问权限(如db_datareader、db_datawriter)。
    • 确认域账户可通过网络访问数据库服务器(检查防火墙规则、SQL Server登录权限)。
  • 使用内置账户(如Network Service):
    • 域环境下,在数据库服务器添加DOMAIN\你的机器名$登录账户并授权;本地数据库则添加NT AUTHORITY\NETWORK SERVICE账户并授权。

3. IIS身份验证设置

  • 启用Windows身份验证,禁用匿名身份验证(若API强制集成登录)。
  • 进入站点「身份验证 -> Windows身份验证 -> 提供程序」,确保Negotiate和NTLM在列表中,可调整优先顺序(推荐Negotiate在前)。

4. ASP.NET Core身份验证代码配置

在Program.cs中确认Windows身份验证配置正确,且中间件顺序无误:

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate();

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

// 中间件顺序必须符合要求
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

5. SQL Server配置检查

  • 确认SQL Server启用Windows身份验证模式(而非仅SQL Server身份验证)。
  • 在SQL Server管理工具中,验证对应登录账户(应用池身份/机器账户)已存在,且映射到目标数据库的用户,权限配置正确。

6. 日志排查定位

启用详细日志获取具体错误信息,在appsettings.json中添加:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Debug",
      "Microsoft.Data.SqlClient": "Debug"
    }
  }
}

查看IIS日志(路径通常为C:\inetpub\logs\LogFiles)或应用日志文件,通过错误堆栈定位被拒绝的具体账户及原因。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:12:05