我在域上下文下对 PrincipalContext.ValidateCredentials 进行了一个非常简单的调用,导致未知原因导致误报。
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DOMAINNAME"))
{
bool isValid = pc.ValidateCredentials("username", "password");
Console.WriteLine(isValid);
}
当我在 AD 服务器上查看安全审计时,它显示了一个事件 ID 为 4625 的审计失败事件,声称用户没有权限登录机器。我可以使用这些凭据登录到加入此域的终端服务器。在此之前,我对运行应用程序的帐户进行了成功审核,并且我能够成功验证其他用户的凭据。但是,我无法找到成功验证的帐户和未成功验证的帐户之间的任何区别,它们是所有相同域安全组的一部分。
帐户无法登录。
主题:安全 ID:NULL SID 帐户名称:- 帐户域:- 登录 ID:0x0
登录类型:3
登录失败的帐户:安全 ID:NULL SID 帐户名称:[已编辑] 帐户域:
失败信息: 失败原因: 用户不允许登录此计算机。状态:0xC000006E 子状态:0xC0000070
进程信息:调用者进程 ID:0x0 调用者进程名称:-
网络信息:工作站名称:[已编辑] 源网络地址:[已编辑] 源端口:62667
详细的身份验证信息:登录过程:NtLmSsp 身份验证包:NTLM Transited Services:- 包名称(仅限 NTLM):- 密钥长度:0
当登录请求失败时会生成此事件。它是在尝试访问的计算机上生成的。
主题字段指示请求登录的本地系统上的帐户。这通常是服务器服务等服务,或 Winlogon.exe 或 Services.exe 等本地进程。
登录类型字段指示所请求的登录类型。最常见的类型是 2(交互式)和 3(网络)。
进程信息字段指示系统上的哪个帐户和进程请求登录。
网络信息字段指示远程登录请求的来源。工作站名称并非始终可用,在某些情况下可能留空。
身份验证信息字段提供有关此特定登录请求的详细信息。- 中转服务指示哪些中间服务参与了此登录请求。- 包名称表示在 NTLM 协议中使用了哪个子协议。- 密钥长度表示生成的会话密钥的长度。如果没有请求会话密钥,这将为 0。
我似乎在这里失去了理智,任何可以提供的帮助将不胜感激。如果此时存在,我会考虑使用 PrincipalContext 的替代方案。