Как получить зарегистрированную учетную запись домена Windows из приложения ASP.NET?

У нас есть приложение ASP.NET, которое управляет собственной базой данных пользователей, ролей и разрешений, и недавно мы добавили поле в таблицу User для хранения учетной записи домена Windows.

Я хотел бы сделать так, чтобы пользователю не приходилось выполнять вход физически в наше приложение, а скорее он автоматически входил в систему на основе текущей учетной записи домена Windows DOMAIN \ username. Мы хотим аутентифицировать учетную запись домена Windows по нашей собственной таблице User.

Это несложно сделать в Windows Forms, возможно ли это сделать в веб-формах?

Я не хочу, чтобы пользователю предлагался экран вызова Windows, я хочу, чтобы наша система обрабатывала вход в систему.

Разъяснение: Мы используем наш собственный объект "Принципал".

Разъяснение: Не уверен, имеет ли это значение или нет, но мы используем IIS7.

Я пробовал все эти варианты ... проблема в том, что я использую настраиваемый объект-принципал. Я попытался включить интегрированную безопасность, и, хотя пользователю все еще предлагалось ввести логин и пароль, после входа в систему Environment.UserName вернулся к СЕТЕВОЙ СЛУЖБЕ.

mattruma 11.09.2008 22:22

Похоже, что тогда олицетворение отключено. Олицетворение указывает ASP.NET выполнить запрос от имени аутентифицированного пользователя. Без него ASP.NET выполнит запрос с использованием учетной записи службы ASP.NET по умолчанию (или СЕТЕВОЙ СЛУЖБЫ в Windows 2003/2008).

Chris 10.07.2009 00:18

Я все еще не могу этого сделать. Я попытался возиться с интеграцией IIS, но безрезультатно, он продолжает возвращаться к учетной записи NETWORK SERVICE. Есть ли способ, чтобы пользователи входили в систему автоматически на основе их текущих учетных данных Windows NT?

mattruma 20.09.2008 21:05

Браузер клиента решает, входить в систему автоматически или нет. IE основывает его на зонах безопасности, и я думаю, что Firefox нужно какое-то изменение og about: config для этого.

Mark Brackett 10.07.2009 00:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
4
4 904
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

using System.Security.Principal;
...
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User;

чтобы получить текущего пользователя домена. Конечно, вы должны убедиться, что IIS настроен для обработки аутентификации Windows.

Это может быть полезно:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent();

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity);

string name = myPrincipal.Identity.Name;
string authType = myPrincipal.Identity.AuthenticationType;
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString();

string identName = myIdentity.Name;
string identType = myIdentity.AuthenticationType;
string identIsAuth = myIdentity.IsAuthenticated.ToString();
string iSAnon = myIdentity.IsAnonymous.ToString();
string isG = myIdentity.IsGuest.ToString();
string isSys = myIdentity.IsSystem.ToString();
string token = myIdentity.Token.ToString();

Отказ от ответственности: я получил это из технической статьи, но не могу найти ссылку.

Мы используем настраиваемый объект Principal и Identity.

mattruma 10.09.2008 18:07
Ответ принят как подходящий

Несколько лет назад я сделал в значительной степени именно то, что вы хотите. Я пытаюсь найти для него какой-то код, хотя он был на предыдущей работе, так что этот код дома.

Я помню, что использовал Эта статья в качестве отправной точки. Вы настраиваете поставщика LDAP, чтобы вы могли фактически выполнить проверку пользователя по сравнению с LDAP. Одна вещь, в которой нужно убедиться, если вы попробуете подход LDAP. В файле настроек, в котором вы настраиваете LDAP, убедитесь, что LDAP - это все заглавные буквы, в противном случае он не будет разрешен.

Можно использовать System.Threading.Thread.CurrentPrincipal.

Мы используем настраиваемый объект Principal и Identity.

mattruma 10.09.2008 18:18

Почему тогда это тебе не помогает? CurrentPrincipal вернет настраиваемый объект-участник ...

Omer van Kloeten 10.09.2008 18:45

Мой пользовательский участник не содержит информации об учетной записи Windows.

mattruma 19.09.2008 17:26

Request.ServerVariables ["REMOTE_USER"]

Это не проверено для вашей установки, но я помню, как использовал это некоторое время назад.

Интеграция такого рода происходит на уровне сервера, это IIS решает, что пользователь не вошел в систему; и именно IIS отправляет пользователю запрос аутентификации, на который браузер реагирует.

Поскольку вы хотите использовать вход в домен, есть только один способ сделать это; встроенная проверка подлинности Windows. Это будет работать только в том случае, если сервер IIS также является частью домена, и пользователи обращаются к машине напрямую, а не через прокси, а с машин, которые также являются частью домена (с надлежащим образом авторизованными пользователями).

Однако ваш настраиваемый основной объект может создавать развлечения и игры; аутентификация этого типа будет WindowsPrincipal и WindowsIdentity; к которому вы можете получить доступ через объект User (см. Как: использовать проверку подлинности Windows в ASP.NET 2.0)

Я предполагаю, что вам нужен пользовательский принципал из-за ваших пользовательских ролей? Я сомневаюсь, что вы сможете заставить этих двоих хорошо сыграть; вы можете создать собственный поставщик ролей, который просматривает ваше хранилище данных, или вы можете посмотреть на АДАМ, расширение AD, которое предоставляет роли для каждой программы и поставляется с хорошими инструментами управления.

Попробуйте Request.ServerVariables ("LOGON_USER").

Если параметры безопасности каталога настроены так, что этот каталог не допускает анонимных пользователей, когда пользователь переходит на эту страницу, ему будет предложено стандартное модальное диалоговое окно с запросом имени пользователя и пароля. Request.ServerVariables ("LOGON_USER") вернет этого пользователя.

Однако это, вероятно, не сработает для вас, потому что вы используете свои собственные объекты безопасности. Если вы сможете выяснить, как обойти это окно входа в систему или передать учетные данные NT на сайт до того, как он их запросит, тогда все будет готово.

Правильно ... проблема в том, что я хочу использовать мой собственный основной объект.

mattruma 10.07.2009 17:39

Вы думали о выдаче себя за другое лицо? Вы можете сохранить учетные данные пользователя для входа в систему NT в своем настраиваемом объекте безопасности, а затем просто выдавать себя за пользователя с помощью кода, когда это необходимо.

http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx

Другие вопросы по теме