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

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

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

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

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

Уточнение : Мы используем наш собственный объект Principal.

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

Ответы [ 8 ]

2 голосов
/ 20 сентября 2008

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

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

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

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

1 голос
/ 10 сентября 2008

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

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

1 голос
/ 10 сентября 2008

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

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();

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

1 голос
/ 10 сентября 2008
using System.Security.Principal;
...
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User;

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

0 голосов
/ 10 июля 2009

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

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

0 голосов
/ 10 июля 2009

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

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

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

0 голосов
/ 11 сентября 2008

Request.ServerVariables [ "REMOTE_USER"]

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

0 голосов
/ 10 сентября 2008

Вы можете использовать System.Threading.Thread.CurrentPrincipal.

...