我在 Server1 和 Server2 上的 ASP.NET 4 (4.0.30319) 应用程序池中部署的 Web 表单的后台代码中使用以下 C# 代码。
PrincipalContext pc = new PrincipalContext(ContextType.Domain, "testnet.testad.org:636", "dc=testnet,dc=testad,dc=org");
bool validated = pc.ValidateCredentials(username, password, ContextOptions.Negotiate);
Server1 正在运行:windows server 2003 SP2
IIS 6.0
ASP.NET 版本 4.0.30319
根据选项,Server1 需要 30-60 秒进行身份验证。
(注意:使用常规 ldap 可立即进行身份验证,无延迟)
Server2 正在运行:windows server 2008 SP2
IIS 7.0
ASP.NET 版本 4.0.30319
运行与 Server1 完全相同的代码,Server2 几乎立即进行身份验证。
(我也针对另一台 IIS 7.0 服务器尝试了该代码,结果相同)
所以我相信代码没有问题,这就是我在 serverfault 上询问这个问题的原因。
以前有人遇到过这个问题吗?
我可以在 Server1 上修补或配置一些东西,以缩短身份验证时间,使其与 Server2 保持一致吗?
感谢您对此提供的任何帮助。
...........................................................................................................................................
[更新]
我在进行 ldaps 身份验证请求时打开了 wireshark。
我创建了一个文件,其中包含所有超过 636 的请求。
可以在此处查看:服务器1 636 流量
最大的差距在于:
1949 号,1.115583 秒 - 06788 号,14.501754 秒
和
6803 号,14.64297 秒 - 11742 号,27.921379 秒
该端口上的所有其他流量都发生在同一秒内。
注意:Server2 上的流量大致相同,但都发生在 2-3 秒之间。
可以在此处查看:服务器2 636 流量
答案1
尝试运行进程监视器查看您是否被拒绝访问:
C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
如果是,请授予服务帐户对其的读取权限。