ASP.NET/IIS应用迁移至Server2019后非管理员访问报403错误如何解决
可能的故障原因
- IIS内核模式身份验证默认配置差异:Windows Server 2019的IIS默认开启Windows身份验证的内核模式,该模式下IIS会使用
Local System账号处理身份认证请求,不会用应用池身份校验客户端用户的资源访问权限,仅依赖目录物理ACL判断权限。如果目录ACL未给普通用户开放权限,就会直接返回403,而管理员默认有目录权限所以访问正常。 - 目录ACL继承丢失:迁移应用文件时如果直接跨系统拷贝,原有面向
Authenticated Users(已认证用户)的权限继承会被中断,仅保留管理员组的访问权限。 - NTLM缓解策略限制:Windows Server 2019默认启用NTLM权限提升防护策略,会拦截普通域用户的身份令牌传递到IIS服务层,只有管理员权限的令牌可以正常完成校验流程。
- IIS隐式授权规则拦截:Server 2019的IIS默认会添加隐藏的授权规则,仅管理员组默认在允许访问列表,普通用户组如果没有显式添加授权规则就会被拦截。
服务器端排查项
- 提取IIS访问日志里403错误的子状态码,不同子状态码对应不同的权限拒绝原因:
403.1对应执行权限不足、403.2对应读权限不足、403.7要求客户端证书、403.50对应IP/域限制规则拦截,可以快速缩小排查范围。 - 检查应用对应物理目录的ACL权限:右键目录→属性→安全,确认
Authenticated Users或对应的业务用户组有读取、读取和执行、列出文件夹内容的权限,且权限已应用到所有子目录和文件。 - 检查IIS身份验证配置:打开IIS管理器→对应站点→身份验证→Windows身份验证→高级设置,临时关闭内核模式身份验证测试访问是否恢复,如果关闭后正常,可选择继续关闭内核模式,或给应用池运行账号授予
SeImpersonatePrivilege(身份验证后模拟客户端)权限。 - 检查IIS授权规则:对应站点→授权规则,确认存在允许所有用户或对应业务普通用户组的规则,没有针对普通用户的拒绝规则。
- 检查本地安全策略:运行
secpol.msc→本地策略→安全选项→「网络安全: 限制NTLM: 此域中的NTLM身份验证」,确认没有配置仅拒绝普通用户的限制规则。 - 检查应用池身份配置:确认应用池运行的账号(ApplicationPoolIdentity、Network Service或自定义服务账号)有对应用物理目录的读取执行权限。
客户端排查项
- 检查站点是否在浏览器的本地Intranet/可信站点区域:只有本地Intranet区域的站点会默认传递当前Windows用户的身份凭据,Internet区域默认不会传递凭据,会导致身份校验失败返回403,管理员账号因为UAC权限提升会忽略部分区域限制所以访问正常。
- 测试匿名访问场景:临时将站点的身份验证改为匿名身份验证,测试普通用户是否能正常访问,如果可以则确认问题出在Windows身份验证的权限链路,无需排查网络、证书等其他链路。
- 检查客户端本地安全策略:运行
secpol.msc→本地策略→安全选项→「网络安全: 配置Kerberos允许的加密类型」,确认和服务器端配置一致,没有禁用兼容的加密算法导致身份令牌解析失败。
内容的提问来源于stack exchange,提问作者JohannSinuhe
相关产品推荐
相关产品推荐

