#c# #windows-authentication #blazor-server-side #asp.net-core-5.0
#c# #windows-проверка подлинности #blazor- на стороне сервера #asp.net-core-5.0
Вопрос:
Я разрабатываю собственное приложение, которое требует аутентификации пользователя по AD. С учетом сказанного пользователь должен указать свой идентификатор / пароль на экране входа в систему для аутентификации. (Мы не хотим, чтобы кто-то мог просто открыть приложение и делать что угодно)
Я просмотрел несколько статей о настройке среды и использовании существующей идентификации через System.Безопасность.Принципал.WindowsIdentity.GetCurrent() . Никто не говорит об аутентификации с помощью информации, предоставляемой пользовательским интерфейсом.
У меня есть созданная форма входа, и у меня есть настроенный AuthenticationStateProvider, но я не знаю, как передать учетные данные, которые я получил от пользователя, в Windows, чтобы он мог аутентифицировать его с помощью AD.
Может кто-нибудь пролить некоторый свет на то, как я могу это сделать? Спасибо!
Комментарии:
1. Что вы пытались реализовать, а что не сработало?
2. @DanielMann Я создал экран входа в систему, но не могу понять, каким методом я могу передать идентификатор пользователя и пароль, чтобы получить аутентификацию AD.
Ответ №1:
Для этого я использую стандартную клиентскую библиотеку LDAP .NET, она работает нормально.
Используйте это так:
using (var cn = new LdapConnection())
{
// connect to AD host
cn.Connect("your_ad", 389);
try
{
cn.Bind("user@domain", "pwd");
}
catch(LdapException e)
{
// invalid credentials
}
}
Комментарии:
1. @Stefan… Спасибо! благодаря вашему руководству я нашел нужный мне пакет… Спасибо!
Ответ №2:
Благодаря руководству Стефана я нашел систему пакетов.DirectoryServices.Протоколы. Использование очень похоже на Novell, упомянутый Стефаном. Ниже приведен тестовый код, который я планирую интегрировать в AuthenticationStateProvider.
using (var cn = new LdapConnection(new LdapDirectoryIdentifier("ad_servername")))
{
try
{
// this how you can verify the password of an user
cn.Bind(new NetworkCredential("myid", "mypwd"));
}
catch(LdapException l)
{
Console.WriteLine("logon failed");
}
}