2016-07-06 5 views
6

У меня есть сайт интрасети, построенный в MVC6 с использованием ASP.NET Core RC2. Я хочу получить имя пользователя Windows для доступа к сайту интрасети.Как получить текущего пользователя Windows с ASP.NET Core RC2 MVC6 и IIS7

Так что если Джим отправится на сайт интрасети, я хочу, чтобы сайт получил «Домен \ Джим», а если Энн отправится на сайт интрасети, я хочу, чтобы сайт получил «Домен \ Энн».

Только аутентификация Windows включена на моем сервере IIS, анонимная аутентификация отключена.

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

<system.web> 
    <authentication mode="Windows" /> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 
</system.web> 

Через отладки можно использовать System.Security.Principal.WindowsIdentity.GetCurrent().Name, но это, конечно, возвращает «IIS AppPool \ Имя_узла» на сервере IIS.

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

//Startup.cs 
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 

//HomeController.cs 
public HomeController(IHttpContextAccessor _accessor) 
{ 
    string userName = _accessor.HttpContext.User.Identity.Name; 
} 

Что такое правильный способ передать имя пользователя Windows, на интранет-сайт в ASP.NET ядра RC2 MVC6?

+0

У вас отключен анонимный доступ к вашему сайту? – DavidG

+0

Да. Я отключил его со следующим: . <разрешение> Я обновил свой вопрос с помощью блока . – Kyle

+0

Есть ли у вас аутентификационное письмо? – DavidG

ответ

2

Для всех, кто использует проверку подлинности Windows в приложении Intranet, который просто хочет получить информацию о пользователе, это проще, чем вы думаете.

В вашем контроллере эта строка будет захватывать имя пользователя текущего пользователя в форме DOMAIN \ username.

var userId = this.User.Identity.Name; 

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

0

Использование var userId = this.User.Identity.Name; работало для меня. Мое приложение работает в интрасети, и все, что я хотел сделать, это получить идентификатор входа пользователя из Windows. Мне не нужно было хранить информацию пользователя, поскольку она уже хранится в Active Directory.