首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PrincipalContext.ValidateCredentials呼叫是如何在DC注册或标记的?

PrincipalContext.ValidateCredentials呼叫是如何在DC注册或标记的?
EN

Stack Overflow用户
提问于 2022-08-31 13:13:32
回答 1查看 25关注 0票数 0

我正在使用来自PrincipalContext.ValidateCredentials命名空间的System.DirectoryServices.AccountManagement方法来验证针对Active服务器的用户凭据。代码样本:

代码语言:javascript
运行
复制
private bool CheckIfCredentialsAreValidInDomain(string pLogin, string pPassword)
{
    bool areCredentialsValidInDomain = true;
    using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
    {
        areCredentialsValidInDomain = context.ValidateCredentials(login, password);                
    }            
    return areCredentialsValidInDomain;
}

在客户环境中有一个域和多个DC (6或更多)DC。我不把DC名称传递给PrincipalContext构造函数--假设DC定位器服务正在做它的工作--这对我来说并不重要,因为哪个特定的DC是从可用DC列表中使用的。一切都很好,但我有这样一种情况,即用户不直接登录域(在启动使用此验证的应用程序之前),但他的计算机在物理上连接到客户的网络。

此用户的域帐户最近已被禁用。原因:在过去的X个月里,他没有登录到这个域名。但在此之前,他每天都在使用应用程序,因此调用ValidateCredentials方法并返回true。但是由于不清楚的原因,这个动作对于DC来说是“跨部门的”,并且这个验证没有被标记。

那么ValidateCredentials是如何工作的呢?它是设置了LastLogon和lastLogonTimestamp用户的属性,还是只是告诉我们凭据是否有效?它在DC上注册任何事件日志条目吗?

EN

回答 1

Stack Overflow用户

发布于 2022-08-31 14:57:26

PrincipalContext的源代码现在可用了。ValidateCredentials()调用CredentialValidator.Validate() (内部类)。

这最终调用了lockedLdapBind(),它使用凭据调用LdapConnection.Bind()

它实际上是针对服务器测试凭据的。因此,要么您的代码的这一部分没有实际运行,要么正在测试的帐户没有真正被禁用。

我在代码中注意到的是,您将变量loginpassword传递给ValidateCredentials。但是,方法的参数称为pLoginpPassword。这是您的问题中的一个错误,还是您的代码中的错误?如果这是准确的,那么您实际上并不是在测试传递给您的方法的凭据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73556453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档