Обнаружение пользователя, вошедшего в систему с помощью приложения ASP.NET

2

Я хочу разработать приложение ASP.NET, которое может обнаружить пользователя, зарегистрированного в домене Windows. Эти учетные данные будут использоваться для входа в приложение ASP.NET.

Как я могу это сделать?

Спасибо!

Теги:
active-directory
windows-authentication

5 ответов

7
Лучший ответ

В IIS включите встроенную проверку подлинности Windows и код, если вы используете:

Request.ServerVariables["LOGON_USER"]

он вернет имя пользователя Windows для зарегистрированного пользователя, то есть MYDOMAIN\MYUSERNAME

  • 0
    Если пользователь делает анонимный вход в IIS, я не вижу его данных. Это работает только на компьютере, где работает IIS.
  • 0
    Хорошо, это работает с отключением анонимного входа в систему на IIS.
Показать ещё 1 комментарий
1

Для ASP.net вы, вероятно, можете использовать

HttpContext.Current.User.Identity

Если IIS настроен правильно (по крайней мере, анонимные входные данные)

1

Вот код С#, который я использую для проверки подлинности в Active Directory

using System;
using System.DirectoryServices;

namespace XYZcompany.Enterprise
{
  public class AuthenicationMgr
  {
    private static readonly int AD_ERR_LOGON_FAIL = -2147023570;
    private static readonly string _path = "LDAP://xxx.yyy.ggg";
    private static readonly string _domain = "xxx.yyy.ggg";

    public static bool IsAuthenticated(string username, string pwd)
    {
      bool authenticatedFlag = true;
      string domainAndUsername = _domain + "\\" + username;
      DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
      try
      {
        // Bind to the native AdsObject to force authentication.
        Object obj = entry.NativeObject;
        DirectorySearcher search = new DirectorySearcher(entry);

        search.Filter = "(SAMAccountName=" + username + ")";
        search.PropertiesToLoad.Add("cn");
        SearchResult result = search.FindOne();

        if (result == null)
        {
          authenticatedFlag = false;
        }
        else
        {
          authenticatedFlag = true;
        }
      }
      catch (System.Runtime.InteropServices.COMException ex)
      {
        if (ex.ErrorCode == AD_ERR_LOGON_FAIL)
        {
          authenticatedFlag = false;
        }
        else
        {
          throw new ApplicationException("Unable to authenticate user due to system error.", ex);
        }
      }
      return authenticatedFlag;
    }
  }
}
  • 0
    Я не спрашиваю об этом, но мне это нужно. Спасибо!
0

Вы должны посмотреть на поставщика активного каталога. Он встроен в ASP.NET.

0
System.Security.Principal.WindowsIdentity.GetCurrent().User.ToString
  • 0
    Это не будет работать с приложениями ASP.NET, так как при этом будут возвращены учетные данные IIS, а не зарегистрированный пользователь
  • 0
    Я использую это каждый день, и он отлично работает для меня и всех пользователей, использующих веб-сайт.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню