Как получить данные пользователя в asp.net Аутентификация Windows

Я использую проверку подлинности Windows и доступ к имени пользователя как.

IIdentity winId = HttpContext.Current.User.Identity;
string name = winId.Name;

но я хочу получить другие данные, такие как полное имя пользователя и идентификатор электронной почты.

Ответ 1

Поскольку вы находитесь в сети Windows, вам нужно запросить Active Directory для поиска пользователя, а затем получить его свойства, такие как адрес электронной почты

Вот пример функции DisplayUser, которая задана IIdentity в сети с проверкой подлинности Windows, находит пользователя email:

public static void Main() {
    DisplayUser(WindowsIdentity.GetCurrent());
    Console.ReadKey();    
}

public static void DisplayUser(IIdentity id) {    
    WindowsIdentity winId = id as WindowsIdentity;
    if (id == null) {
        Console.WriteLine("Identity is not a windows identity");
        return;
    }

    string userInQuestion = winId.Name.Split('\\')[1];
    string myDomain = winId.Name.Split('\\')[0]; // this is the domain that the user is in
     // the account that this program runs in should be authenticated in there                    
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + myDomain);
    DirectorySearcher adSearcher = new DirectorySearcher(entry);

    adSearcher.SearchScope = SearchScope.Subtree;
    adSearcher.Filter = "(&(objectClass=user)(samaccountname=" + userInQuestion + "))";
    SearchResult userObject = adSearcher.FindOne();
    if (userObject != null) {
        string[] props = new string[] { "title", "mail" };
        foreach (string prop in props) {
            Console.WriteLine("{0} : {1}", prop, userObject.Properties[prop][0]);
        }
    }
}

дает следующее: alt text

Изменить: если вы получаете "плохие ошибки пользователя/пароля", Учетная запись, в которой работает код, должна иметь доступ к домену пользователей. Если вы запускаете код в asp.net, веб-приложение должно запускаться в пуле приложений с учетными данными с доступом к домену. См. здесь для получения дополнительной информации

Ответ 2

Вы можете определить MyCustomIdentity, переопределив из IIdentity и добавить свои собственные свойства и т.д.

Ответ 3

Передайте его конкретному идентификатору, например WindowsIdentity