使用Active Directory时出现超时问题

时间:2011-11-04 22:19:41

标签: c# active-directory

我正在尝试做一些事情。首先,此c#程序使用以下命令验证Active Directory用户凭据:

var ADentry = new DirectoryEntry("LDAP://domain", uname, pword);

但显然你需要以某种方式传递用户名和密码。当用户从Active Directory登录网络并在字段中使用该用户而不在用户名和密码中输入用户名时,是否有一种方法可以自动检索它。

如果没有,我就这样做,以便用户可以在控制台中输入他们的凭据。但如果它不起作用,它最终会永远悬挂。在1分钟之后,我可以使用什么类型的代码来暂停,如果它一直挂起,否则它会永久挂起?感谢

1 个答案:

答案 0 :(得分:0)

我正在尝试进行LDAP查询,以下内容将为您完成。其中大多数是方法,但您可能对这行代码感兴趣:PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sDefaultOU, ContextOptions.Negotiate);

完整的代码在这里:

IsUserGroupMember("username", "group name the user is in");

public string sDomain = "your.domainName.com"
public string sDefaultOU = OU=**,OU=**,DC=**,DC=**,DC=**

        public void IsUserGroupMember(string sUserName, string sGroupName)
        {
            try
            {
                UserPrincipal oUserPrincipal = GetUser(sUserName);
                GroupPrincipal oGroupPrincipal = GetGroup(sGroupName);

                if (oUserPrincipal != null && oGroupPrincipal != null)
                {
                    //do something
                }
                else
                {
                    //nothing
                }
            }
            catch (PrincipalServerDownException)
            {
                throw;

            }
            catch (Exception)
            {
                throw;
            }
        }


public UserPrincipal GetUser(String sUserName)
        {
            PrincipalContext oPrincipalContext = GetPrincipalContext();

            UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPrincipalContext, sUserName);
            return oUserPrincipal;


        }

        public GroupPrincipal GetGroup(string sGroupName)
        {
            PrincipalContext oPrincipalContext = GetPrincipalContext();

            GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, sGroupName);
            return oGroupPrincipal;
        }

        public PrincipalContext GetPrincipalContext()
        {
            PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sDefaultOU, ContextOptions.Negotiate);
            return oPrincipalContext;
        }

我希望这段代码对您有用。