Войти в систему Пользователь
-
05-07-2019 - |
Вопрос
У моей компании есть большое приложение, которое мы заканчиваем. Он использует WCF в качестве основы с Active Directory для аутентификации. Это прекрасно работает для одного из двух сайтов, так как модель аутентификации - Windows, и вы должны быть частью домена, чтобы войти на сайт. Вопрос, который у меня есть, относится к другому сайту, который доступен извне. Он устанавливает ClientCredentials.Windows.ClientCredential для вызова прокси-сервера с определенным пользователем / pass для олицетворения пользователя AD, поэтому работает полная модель безопасности. Это все работает точно так же, как ожидалось.
У меня такой вопрос: в Интернете я могу использовать HttpContext.Current.User.Identity.Name, чтобы получить текущего пользователя, вошедшего в систему, из части проверки подлинности с помощью форм, но для этого мне нужно убедиться, что System.Web существует ссылка на библиотеку DLL, в которой я сейчас работаю. Наши базовые объекты взяты из упрощенного класса, который не знает о System.Web. Есть ли способ узнать пользователя Forms, который вошел в этот базовый объект проекта? Я попробовал System.Security.Principal, но он дает мне доступ к учетным записям Windows только из того, что я могу сказать, и не принесет мне никакой пользы.
Я знаю, что можно просто сослаться на System.Web и покончить с этим, но для меня это звучит очень круто, и это не лучший вариант, поэтому я надеюсь получить несколько советов здесь.
Решение
Thread.CurrentPrincipal.Identity
будет делать то же самое, что и HttpContext.CurrentContext ...
Он вернет идентификатор, связанный с текущим исполняющим потоком, который в большинстве случаев является зарегистрированным пользователем *.
Примечание: * Если вы используете делегирование / олицетворение или работаете в качестве учетной записи службы, она вернет учетную запись, под которой когда-либо идентифицируется поток, но в вашем случае это не похоже на то, что вы делаете какой-либо контекст переключение личности.
Другие советы
Если вам достаточно имени пользователя в виде строки,
Environment.UserName
// Environment.UserDomainName and MachineName can also be useful
Из MSDN а>: р>
Получает имя пользователя, который запустил текущий поток.