Blazor — проверка подлинности Windows

#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");
    }
}