Проверка учетных данных пользователя удаленно - PullRequest
2 голосов
/ 16 декабря 2011

В настоящее время я использую LogonUser () для аутентификации имени пользователя и пароля моего пользователя в моем локальном домене в офисе, и он отлично работает для того, что мне нужно.

Поскольку я разработал приложение, мне теперь нужнозаставить его работать через мой VPN.Кажется, LogonUser () не будет работать с УДАЛЕННО проверять учетные данные.Или это будет?Можно ли использовать LogonUser () для проверки учетных данных пользователя в учетной записи домена REMOTE?

В некоторых местах я читал, что с помощью LOGON32_LOGON_NEW_CREDENTIALS для 4-го параметра (тип входа) и LOGON32_PROVIDER_WINNT50 для 5-го параметра (поставщик)) сделает свое дело.Но каждый раз, когда я пытаюсь это сделать, я ВСЕГДА добиваюсь успеха ... Я могу предоставить пользователя bogas и передать, и он будет работать каждый раз: (.

Идеи?


Редактировать - ДобавленоПримечания

Пытался использовать эту функцию, но я получал исключение, сообщающее, что пользователь / пароль был плохим.

    public bool Win2kCredentialsIsValid(string domain, string username, string password)
    {
        string adPath = "LDAP://" + domain + "/rootDSE";
        DirectoryEntry adRoot = new DirectoryEntry(adPath, domain + "\\" + username, password, AuthenticationTypes.ReadonlyServer);
        try
        {
            object o = adRoot.Properties["defaultNamingContext"];
        }
        catch
        {
            return false;
        }
        return true;
    }

- Правка - Добавлены дополнительные примечания

ОКпоэтому я попробовал еще один пример просто для того, чтобы заставить его работать и начал идти по этому пути, и есть несколько вещей, на которые следует обратить внимание ...

  • MyServerHostName - это именно то, имя хоста моего сервера. EX: 'Server01.
  • В этом примере мое доменное имя - «MyDomain.local»
  • . Таким образом, мой FQN для сервера «Server01.MyDomain.local»

Я попытался сделать эту работу и получил следующую ошибку ...

Указанный тип контекста не соответствует серверу, к которому обращался. Тип сервера - Домен.

Это ошибка в: var context = new PrincipalContext (ContextType.ApplicationDirectory, "MyServerHostName: 389 "," DC = MyDomain, DC = local "))

    private bool CheckADCredentials()
    {
        bool bResults;
        using (var context = new PrincipalContext(ContextType.ApplicationDirectory,
            "MyServerHostName:389",
            "DC=MyDomain,DC=local"))
        {
            var username = "firstname.lastname";
            var email = "firstname.lastname@MyServerHostName";
            var password = "123456";
            var user = new UserPrincipal(context)
            {
                Name = username,
                EmailAddress = email
            };
            user.SetPassword(password);
            user.Save();
            if (context.ValidateCredentials(username, password, ContextOptions.SimpleBind))
            {
                bResults = true;
            }
            else
            {
                bResults = false;
            }

            user.Dispose();
        }

        return bResults;
    }

1 Ответ

1 голос
/ 18 декабря 2011

В итоге я выбрал другое решение.Вместо того, чтобы пытаться проверить учетную запись пользователя в домене, к которому не подключен мой компьютер, я закончил кэшированием учетных данных моего домена в базе данных и просто создал функцию шифрования с соленым типом MD5, чтобы это было сложно… э-э… кому-товзломать это.;)

Теперь я просто проверяю данные из кэшированных учетных данных в базе данных при удаленной работе ... Просто требуется, чтобы пользователь сначала вошел в домен, но затем пользователь мог использовать его удаленно днем ​​и ночью.;)

Спасибо!

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