【问题标题】:Authenticate against ActiveDirectory针对 ActiveDirectory 进行身份验证
【发布时间】:2012-02-15 15:24:14
【问题描述】:

我用谷歌搜索了一下,发现了这个很有前途的代码

System.DirectoryServices.AccountManagement.PrincipalContext pc = new System.DirectoryServices.AccountManagement.PrincipalContext(ContextType.Domain, "YOURDOMAIN")
// validate the credentials 
bool validatedOnDomain = pc.ValidateCredentials(userName, tb.Text.ToString());

userName 被初始化为 Windows 登录名。也是一个字符串 tb.Text.ToString() 是用于输入密码的文本框

更新的代码,它正在工作。谢谢大家

MSDN 表示 PrincipalContext 可以使用两个参数

【问题讨论】:

  • 嗯...您是否在源代码文件的顶部添加了对System.DirectoryServices.AccountManagement 程序集的引用和合适的using System.DirectoryServices.AccountManagement; 子句? PrincipalContext 类不应该来自您的 TestAD 命名空间,真的.....
  • 我忘记添加程序集了。谢谢!这清除了第二个错误,但产生了一个不寻常的错误。
  • 那个错误 #1 似乎仍然表明您在自己的 TestAD 命名空间中有一个 PrincipalContext 类 - 该类可能与来自 System.DirectoryServices.AccountManagement 的“真实”类没有相同的构造函数....

标签: c# .net c#-4.0 active-directory iprincipal


【解决方案1】:

尝试找出这段代码。这在我的项目中完美运行。

public bool  ValidateUser(string varDomain, string varUserName, string varPwd)
    {
        Boolean isValidUser;
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, varDomain))
        {
            isValidUser = pc.ValidateCredentials(varUserName, varPwd);
        }
        return isValidUser;

    }

【讨论】:

    【解决方案2】:

    在 using 语句中使用的类型必须隐式转换为 'System.IDisposable'

    表示您需要将代码更改为:

    PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
    
    // validate the credentials 
    bool validatedOnDomain = pc.ValidateCredentials(userName, tb.Text.ToString());
    

    基本上它只是告诉你不能在using 语句中使用PrincipalContext,因为PrincipalContext 没有实现名为IDisposable 的接口。

    编辑 正如marc_s 在下面指出的那样,您使用的PrincipalContext 不是正确的。它似乎生活在您自己的命名空间中。您应该使用来自System.DirectoryServices.AccountManagement 的那个。

    【讨论】:

    • Actually - it does implement IDisposable - 我想他是在他自己的代码 (TestAD.PrincipalContext.....) 中从 S.DS.AM 命名空间重新创建了PrincipalContext
    • 你是怎么做到的?我在顶部有 Using 语句来导入我需要的类。
    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 2012-03-06
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多