Аутентификация пользователей для интрасети с использованием smtp - PullRequest
4 голосов
/ 27 июня 2011

У меня есть коллекция из примерно 400 пользователей, которые используют электронную почту здесь, в нашей компании, и мы запускаем для них интрасеть, я использую .Net Framework (C #) для прикладного уровня. Мы хотели бы аутентифицировать этих пользователей, используя те же учетные данные, которые они имеют для своей электронной почты, у нашего провайдера электронной почты такой услуги нет, поэтому у меня была идея аутентифицировать их, используя SMTP-сервер (который требует аутентификации).

Я искал метод Authenticate() в классе SmtpClient , но безрезультатно, не может аутентифицировать только . Кто-нибудь должен был решить эту проблему раньше? Думаю, мне придется открыть сокет для SMTP-сервера и отправить команды самостоятельно, но, возможно, есть более простой способ сделать это.

Ответы [ 2 ]

4 голосов
/ 27 июня 2011

Поскольку у вас есть SMTP-сервер, я предполагаю, что у вас также есть POP3-сервер.Я думаю, что я тоже в безопасности, предполагая, что учетные данные для POP3 и SMTP одинаковы.

Если мои предположения верны (что весьма вероятно), вы можете аутентифицировать их по POP3, а не по SMTP.

Итак, вы можете использовать класс Pop3Client , который предоставляет более одного метода аутентификации:

Таким образом, ваш код будет:

  1. Connect
  2. Authenticate (проверка исключений)
  3. Отключите

И все готово!

0 голосов
/ 27 июня 2011

Используя SmtpClient против вашего SMTP-сервера, вы запрашиваете службу.Ваше приложение должно только указывать, использовать ли аутентификацию Windows (которая будет Kerberos или NTLM в зависимости от того, как настроена ваша интрасеть) или спецификацию учетных данных и использовать ли SSL.

Что касается аутентификации приложения, вы можете сослаться на WindowsIdentity из System.Security.Principal.WindowsIdentity.GetCurrent () .В частности, вы можете использовать свойство IsAuthenticated .

Прежде чем пытаться выполнить любой вызов SMTP-сервера, если вы хотите использовать аутентификацию Windows, попробуйте что-то вроде этого:

SmtpClient client = new SmtpClient(server, port);
client.Credentials = CredentialCache.DefaultNetworkCredentials;

Затем разрешите SMTP-серверу авторизовать, действительно ли пользователь может выполнить предпринятое действие.

Если вы хотите сказать, отключите кнопку действия, поскольку SMTP-сервер отклонит предпринятое пользователем действие, и выЕсли вы будете действовать упреждающе и не позволять пользователю делать то, что он не может сделать, то такое отклонение должно быть детерминированным до попадания на SMTP-сервер (т. е. вы не просто полагаетесь на SMTP-сервер, чтобы сказать вам это; вам понадобится какой-то видуровня безопасности бизнеса на месте).

...