Вопрос

У моей компании есть большое приложение, которое мы заканчиваем. Он использует 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 :

  

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

scroll top