Время ожидания при использовании Active Directory - PullRequest
0 голосов
/ 05 ноября 2011

Я пытаюсь сделать пару вещей.Прежде всего, эта программа на c # проверяет учетные данные пользователя Active Directory, используя:

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

Но, очевидно, вам нужно как-то передать имя пользователя и пароль.Есть ли способ, которым вы можете получить его автоматически, когда пользователь входит в сеть из Active Directory, и использовать его в полях, не вводя имя пользователя в имени пользователя и пароле?поэтому пользователь может ввести свои учетные данные в консоли.Но если это не сработает, это в конечном итоге висит навсегда.Какой тип кода я могу использовать для тайм-аута, скажем, через 1 минуту, если он продолжает зависать, иначе он висит навсегда?спасибо

1 Ответ

0 голосов
/ 05 ноября 2011

Я пытался сделать запрос 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;
        }

Надеюсь, этот код будет вам полезен,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...