В настоящее время я использую 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;
}