2016-07-06 33 views
6

Ho un sito intranet costruito in MVC6 utilizzando ASP.NET Core RC2. Voglio ottenere il nome utente di Windows della persona che accede al sito intranet.Come ottenere l'utente corrente di Windows con ASP.NET Core RC2 MVC6 e IIS7

Quindi, se Jim va sul sito intranet, desidero che il sito riceva "Dominio \ Jim", mentre se Anne visita il sito intranet, desidero che il sito riceva "Dominio \ Anne".

Solo l'autenticazione di Windows è abilitata sul mio server IIS, l'autenticazione anonima è disabilitata.

Il mio sito è impostato per utilizzare l'autenticazione di Windows e per disabilitare l'autenticazione anonima.

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

Attraverso Debug posso usare System.Security.Principal.WindowsIdentity.GetCurrent().Name, ma quella dei rendimenti del corso "IIS AppPool \ SiteName" sul server IIS.

Ho trovato molti esempi dalla versione precedente di ASP.NET che utilizza HttpContext e ho provato a inserirli nel mio controller con i seguenti, ma userName termina con null.

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

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

Qual è il modo corretto per passare il nome utente di Windows a un sito Intranet in ASP.NET Nucleo RC2 MVC6?

+0

Hai disattivato l'accesso anonimo al tuo sito? – DavidG

+0

Sì. L'ho disabilitato con il seguente all'interno di . Ho aggiornato la mia domanda con il blocco . – Kyle

+0

Avete registrato un middleware di autenticazione? – DavidG

risposta

2

Per chiunque utilizzi l'autenticazione di Windows su un'app Intranet, chi vuole solo essere in grado di recuperare informazioni su un utente, è più semplice che si possa pensare.

Nel controller, questa linea acquisirà il nome utente dell'utente corrente in DOMAIN \ nome utente.

var userId = this.User.Identity.Name; 

ho trascorso qualche tempo guardando attraverso le altre risposte prima di rendersi conto che la maggior parte di loro ha assunto stavo implementando conti individuali di essere autenticati contro l'AD, non fuori dalla scatola di autenticazione di Windows.

0

L'utilizzo di var userId = this.User.Identity.Name; ha funzionato per me. La mia app è in esecuzione su una rete intranet e tutto quello che stavo cercando di fare è ottenere l'ID di accesso dell'utente da Windows. Non ho avuto bisogno di memorizzare le informazioni dell'utente in quanto è già stato memorizzato in Active Directory.