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

为何CredentialCache.DefaultNetworkCredentials允许非授权用户通过Windows身份验证?

问题原因排查与解决办法

以下是几种可能导致该现象的原因及对应的排查/解决步骤:

  • 域身份信息缓存未刷新
    Windows系统的Kerberos票证和域组身份都有缓存机制,默认Kerberos票证有效期为10小时,客户端组策略更新周期通常是90分钟。即便用户已被移出授权域组,客户端本地缓存的旧身份信息还未失效,导致请求仍携带包含原组权限的凭证,服务端验证时会允许访问。
    解决:在客户端运行klist purge命令清空Kerberos票证,或直接重启客户端机器;同时在服务端回收IIS应用池,确保服务端验证缓存也被清空。

  • IIS/ASP.NET Core的身份验证缓存
    IIS的Windows身份验证(尤其是内核模式下)会缓存已验证用户的会话信息,ASP.NET Core也可能保留身份验证结果缓存。用户组身份变更后,服务端仍在使用旧的验证记录,导致权限判断错误。
    解决:先回收IIS对应应用池,强制刷新服务端缓存;若需临时排查,可在ASP.NET Core配置中禁用身份验证缓存(仅用于排查,不建议长期开启),代码示例:

    services.AddAuthentication(IISDefaults.AuthenticationScheme)
            .AddNegotiate(options => 
            {
                options.CacheSettings.NoCache = true;
            });
    
  • 用户属于其他隐含授权组
    检查当前用户是否属于服务端站点权限中被授权的其他组,比如BUILTIN\Administrators本地管理员组,或是其他被意外赋予访问权限的域组/本地组。有时权限配置会存在疏漏,导致用户通过其他组获得访问权限。
    解决:在IIS站点的「权限」设置里,查看所有被授予允许访问的主体,确认是否有包含当前用户的其他组。

  • 未过期的旧凭证残留
    CredentialCache.DefaultNetworkCredentials会获取当前用户的系统级凭证,包括之前生成的Kerberos票证。如果用户在属于授权组时生成了有效的服务票证,且票证尚未过期,即便用户被移出组,票证内的组信息仍是旧的,服务端会基于票证内容判断权限。
    解决:用klist命令查看当前用户的Kerberos票证列表,找到对应服务的票证确认过期时间,等待票证过期或手动清空(使用klist purge)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:05:53